[[Programming]] ダイアログベースのプログラムで Esc キー (キャンセル) キーの 無効化の方法 林シニア編 Chap16 参照 DlgクラスにClassWizardを使って virtual BOOL PreTranslateMessage(MSG* pMsg); 関数を作成し、 BOOL CChatDlg::PreTranslateMessage(MSG* pMsg) { // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください //ishida エスケープキーを無効化する switch(pMsg->message){ case WM_KEYDOWN: switch(pMsg->wParam){ case VK_ESCAPE: MessageBeep(MB_OK); return TRUE; break; } } return CDialog::PreTranslateMessage(pMsg); } また、たとえばEnter キーによって(エディットボックス内で入力完了後に、 さらにEnterを押すと)、その文字列をつかって何らかの処理をしたい場合などは、 以下のようにDlg.cpp ファイルの上、Message_Mapを手動で追加しておく。 BEGIN_MESSAGE_MAP(CChatDlg, CDialog) //{{AFX_MSG_MAP(CChatDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_R_SERVER, OnRServer) ON_BN_CLICKED(IDC_R_CLIENT, OnRClient) ON_BN_CLICKED(IDC_CONNECTBTN, OnConnectbtn) ON_BN_CLICKED(IDC_SENDBTN, OnSendbtn) ON_BN_CLICKED(IDC_CUTBTN, OnCutbtn) ON_BN_CLICKED(IDC_EXIT, OnExit) //}}AFX_MSG_MAP ON_COMMAND(IDOK,OnSendbtn) ← これを追加 //ON_COMMAND(IDCANCEL,OnExit) IDCANCEL をPretranslateMessage で無効化したので、不要となる ishida Chat プログラムから END_MESSAGE_MAP() 5月6日 ダイアログのIDOK IDCANCEL を、OnOk関数、またOnCancelボタンのクリックで無効化しようとする場合、この関数の上書きを 行った上で、ボタンを削除する。またこの上書き以降、プログラムを終了できなくなるので、あらかじめその対策をしておくこと。 林シニア編 119ページ