[VC6] メッセージボックスの[×]ボタンを使用不可にする
メッセージボックスで[OK][キャンセル] や[はい][いいえ]などを表示するときに、
タイトルバーにある[×]ボタンで閉じられると困る場面が出てきたので、
アプリケーション全体でメッセージボックスの[×]ボタンを使用不可にする処理を作ってみた。
■CWinAppの派生Appクラス.h
■CWinAppの派生Appクラス.cpp
タイトルバーにある[×]ボタンで閉じられると困る場面が出てきたので、
アプリケーション全体でメッセージボックスの[×]ボタンを使用不可にする処理を作ってみた。
■CWinAppの派生Appクラス.h
public CWinAppの派生Appクラス : CWindApp{ protected: static HHOOK m_hHookMB; public: static LRESULT CALLBACK HookMBProc(int nCode, WPARAM wParam, LPARAM lParam); virtual int DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt); }; |
■CWinAppの派生Appクラス.cpp
HHOOK CWinAppの派生Appクラス::m_hHookMB = NULL; LRESULT CALLBACK CWinAppの派生Appクラス::HookMBProc(int nCode,WPARAM wParam, LPARAM lParam ) { if(nCode == HCBT_ACTIVATE){ HMENU hSysMenu = ::GetSystemMenu((HWND)wParam, FALSE); if(hSysMenu != NULL) ::RemoveMenu(hSysMenu, SC_CLOSE ,MF_BYCOMMAND); ::UnhookWindowsHookEx(CWinAppの派生Appクラス::m_hHookMB); } return ::CallNextHookEx(CWinAppの派生Appクラス::m_hHookMB, nCode, wParam, lParam); } int CWinAppの派生Appクラス::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt) { m_hHookMB = SetWindowsHookEx(WH_CBT, HookMBProc, NULL, GetCurrentThreadId()); return CWinAppの派生Appクラス::DoMessageBox(lpszPrompt, nType, nIDPrompt); } |
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント