ダイアログベースの WSLアプリが ESCAPEで終了してしまう
作ったアプリが、ESCを押すと終了してしまう。
よく考えると、ダイアログベースアプリの仕様だった。
無効にする方法を考えてみる
LRESULT CMainDlg::OnEscape (WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { return 0; } |
まず、OnEscape の処理を用意しておく
BEGIN_MSG_MAP(CMainDlg) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) COMMAND_ID_HANDLER(ID_ESCAPE, OnEscape) END_MSG_MAP() LRESULT OnCancel(WORD, WORD wID, HWND, BOOL& ); LRESULT OnEscape(WORD, WORD wID, HWND, BOOL& ); |
メッセージマップに追加
これだけだとメッセージは飛んでこないので
アクセラレータに、 VKEY_ESCをID_ESCAPEで登録
BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) { if (::TranslateAccelerator(mainWnd, m_hAccel, pMsg)) { return TRUE; } else if (m_webBrowser.IsWindow() && m_webBrowser.SendMessage( WM_FORWARDMSG, 0, reinterpret_cast { return true; } return CWindow::IsDialogMessage(pMsg); } LRESULT CMainDlg::OnInitDialog (UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL&) { m_hAccel = LoadAccelerators(hSaveInstance, MAKEINTRESOURCE(IDR_MAINFRAME)); |
OnInitDialogでアクセラレータを登録
PreTranslateMessageで処理に飛ばす。
Comments