- ベストアンサー
MFCのCDialogクラスについて、、、
環境:VC6.0、MFC、WinNT4.0 普通のモードレスダイアログを作成して、メニューから呼び出すようにしました。 デフォルトについてくる「OK」「Cancel」ボタンは要らないので削除しました。 ところが、アプリケーションを実行して作成したダイアログを呼び出した後、「Enter」或いは「Esc」キーを押すとダイアログが消えてしまいます。 それが消えないようにしたいのですが、、、 ご指導お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
派生元(親)のCDialogクラスに、 CDialog::OnOK() CDialog::OnCancel() が実装されているからですね。 派生先(子)のCDlgTest(仮名)クラスに、 CDlgTest::OnOK() { // 何もしない } CDlgTest::OnCancel() { // 何もしない } を追加して、明示的に何もしないようにしています。 -- > デフォルトについてくる「OK」「Cancel」ボタンは要らないので削除しました。 削除の前にダブルクリックで関数を作って、CDialog::~を呼び出している個所をコメントアウト。 という手順が楽です。
その他の回答 (1)
- yosi_yosi
- ベストアンサー率35% (165/468)
私はいつも、 BOOL CXXXDialog::PreTranslateMessage(MSG* pMsg) { //// ENTERとESCを無効にする /////////////////////////// if( pMsg->message==WM_KEYDOWN ) { switch(pMsg->wParam) { case VK_RETURN: case VK_ESCAPE: return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } としています。 これでENTERやESCキーを押しても何も起こらなくなります。
お礼
いい参考になりました。 どうもありがとうございました。
お礼
その通りでした。OnCancel、OnOKは仮想関数でしたね。 ありがとうございました。