« [VC6] 指定URLのファイルダウンロード | トップページ | [CSS] 背景に依存しない画像やテーブルを使わない縁付き角丸ボックス »

2008年6月27日 (金)

[VC6] メッセージボックスの[×]ボタンを使用不可にする

メッセージボックスで[OK][キャンセル] や[はい][いいえ]などを表示するときに、
タイトルバーにある[×]ボタンで閉じられると困る場面が出てきたので、
アプリケーション全体でメッセージボックスの[×]ボタンを使用不可にする処理を作ってみた。

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

|

« [VC6] 指定URLのファイルダウンロード | トップページ | [CSS] 背景に依存しない画像やテーブルを使わない縁付き角丸ボックス »

プログラミング(VC6)」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [VC6] メッセージボックスの[×]ボタンを使用不可にする:

« [VC6] 指定URLのファイルダウンロード | トップページ | [CSS] 背景に依存しない画像やテーブルを使わない縁付き角丸ボックス »