VS_Cancel_OK のバックアップ(No.1) - アールメカブ

アールメカブ


VS_Cancel_OK のバックアップ(No.1)


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()