VS_Cancel_OK - RとLinuxと...

RとLinuxと...


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

 
Link: Programming(3061d)
Last-modified: 2007-10-07 (日) 15:42:22 (4121d)