開発環境:VisualC++ 2008
動作OS:Windows7です。
ウィンドウの右上のxボタンでウィンドウを終了させる時、確認ウィンドウを表示させた
いのですが、
以下の関数を定義しても、うまく動きません。
WndProc()関数が呼ばれていないようです。
どうすれば呼ばれるのでしょうか?
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
switch (msg) {
case WM_CLOSE:
if ( IDYES == MessageBox (
hwnd,
TEXT(Are you sure you want to quit this program?),
TEXT(Confirmation),
MB_YESNO ) ) {
DestroyWindow(hwnd);
}
return 0;
case WM_RBUTTONUP:
DestroyWindow(hwnd);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
よろしくお願いします。
なんででしょうね。
1.×ボタンでのWM_CLOSEは最上位(トップレベル)のフレームウインドウに来ます。
RegisterClassしたときに設定したコールバックですね。
このコールバックはそれですか。
2.WM_CLOSEでメッセージボックスを表示し終わったら、DestroyWindow()ではなく、
return Default_Proc( msge, wpar, lpar);としましょう。
WM_RBUTTONUPの処理も変ですが割愛。
間違いました。・・・orz.
2.WM_CLOSEでメッセージボックスを表示し終わったら、DestroyWindow()ではなく、
× return Default_Proc( msge, wpar, lpar);としましょう。
○ return DefWindowsProc( hwnd, msg, wp, lp);としましょう。
仲澤さん。いつも回答ありがとうございます。
OnSysCommandメソッドで以下のように処理したらできるようになりました。
void CTmpDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}else if(nID == SC_CLOSE) {
//xボタンをおされたら終了確認のダイアログを表示する。
ConfirmExitFunc();
}else{
CDialog::OnSysCommand(nID, lParam);
}
}
解決しました。