終了時と同じウィンドウ位置で表示するには?
付箋紙ソフトもどきを作っています。
ダイアログのボタン押し下げにて新たなウィンドウが何個も生成されるようになっています。
アプリを終了して再度起動すると、終了前に表示されていたウィンドウが終了前と同じ位置に表示されるようにしたいと思っています。
以下のコードでは、全てのウィンドウが同じ場所に表示されてしまいます。
どのようにすれば、各ウィンドウがそれぞれの元の位置に表示されるようにできますか?
各ウィンドウ毎に位置情報を保存、読出しするにはどうすれば良いのでしょうか?
よろしくお願いします。
BOOL CMyWnd::kado_Create(CWnd* parent,CString m_InputData){
int nX,nY;//ウィンドウの位置を格納する変数
nX = GetPrivateProfileInt("Pos","X",0,"TSHANG2.INI");
nY = GetPrivateProfileInt("Pos","Y",0,"TSHANG2.INI");
略
CreateEx( dwExStyle, lpszClassName, _T("Test"), dwStyle, rect, parent, NULL, NULL);
略
}
void CMyWnd::OnDestroy()
{
int nX,nY;//ウィンドウの左上の座標を格納する変数
WINDOWPLACEMENT wp;//WINDOWPLACEMENT構造体
char szBuffer[32];//キーの値を格納する
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement(m_hWnd,&wp);
nX = wp.rcNormalPosition.left;
nY = wp.rcNormalPosition.top;
wsprintf(szBuffer,"%d",nX);
WritePrivateProfileString("Pos","X",szBuffer,"TSHANG2.INI");
wsprintf(szBuffer,"%d",nY);
WritePrivateProfileString("Pos","Y",szBuffer,"TSHANG2.INI");
略
}
お礼
いつも本当にありがとう御座います。 基本形が全て完成したと思っていたら、今回の件でつまずき質問しました。 イメージは分かっていても今1つ手が動かず、また質問の回答をみても、簡単には行かないだろうと思っていました。 ところが、なっなんと奇跡です。一発でうまく行きました。 ようやく、C++に慣れてきたみたいです。 従来であれば、1を採用しました。 ところがCPtrArrayが今1つ分からず、剥がした付箋が何番目の要素か検索する方法が分かりません。 そこで2でやったらうまく行きました。 3は以前の仕様での方針でしたが、今回は方針を根本的に変えたので採用しませんでした。 今後のために1のもう少し具体的なコードを教えていただけると助かります。 aaaaはCStringです。crlf ="\x0a"としてます。 いただきって思いやってみたら、'CString' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。のエラーが出ました。 #CPtrArrayの良い例が本やネット上さがしても見つかりません。 CPtrArrayはある人が教えてくれたコードにあったので、便利だと思って採用しました。