xボタンで終了時、確認ウィンドウを表示させたい – プログラミング – Home

xボタンで終了時、確認ウィンドウを表示...
 
通知
すべてクリア

[解決済] xボタンで終了時、確認ウィンドウを表示させたい


yama1
 yama1
(@yama1)
ゲスト
結合: 10年前
投稿: 7
Topic starter  

開発環境: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);
}

よろしくお願いします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

なんででしょうね。

1.×ボタンでのWM_CLOSEは最上位(トップレベル)のフレームウインドウに来ます。
 RegisterClassしたときに設定したコールバックですね。
 このコールバックはそれですか。

2.WM_CLOSEでメッセージボックスを表示し終わったら、DestroyWindow()ではなく、
 return Default_Proc( msge, wpar, lpar);としましょう。

WM_RBUTTONUPの処理も変ですが割愛。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

間違いました。・・・orz.

2.WM_CLOSEでメッセージボックスを表示し終わったら、DestroyWindow()ではなく、
 × return Default_Proc( msge, wpar, lpar);としましょう。
 ○ return DefWindowsProc( hwnd, msg, wp, lp);としましょう。


返信引用
yama1
 yama1
(@yama1)
ゲスト
結合: 10年前
投稿: 7
Topic starter  

仲澤さん。いつも回答ありがとうございます。

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);
}
}


返信引用
yama1
 yama1
(@yama1)
ゲスト
結合: 10年前
投稿: 7
Topic starter  

解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました