VS_Cancel_OK の変更点 - アールメカブ

アールメカブ


VS_Cancel_OK の変更点


[[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ページ