• ベストアンサー

MFCのCDialogクラスについて、、、

環境:VC6.0、MFC、WinNT4.0 普通のモードレスダイアログを作成して、メニューから呼び出すようにしました。 デフォルトについてくる「OK」「Cancel」ボタンは要らないので削除しました。 ところが、アプリケーションを実行して作成したダイアログを呼び出した後、「Enter」或いは「Esc」キーを押すとダイアログが消えてしまいます。 それが消えないようにしたいのですが、、、 ご指導お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

派生元(親)のCDialogクラスに、 CDialog::OnOK() CDialog::OnCancel() が実装されているからですね。 派生先(子)のCDlgTest(仮名)クラスに、 CDlgTest::OnOK() {  // 何もしない } CDlgTest::OnCancel() {  // 何もしない } を追加して、明示的に何もしないようにしています。 -- > デフォルトについてくる「OK」「Cancel」ボタンは要らないので削除しました。 削除の前にダブルクリックで関数を作って、CDialog::~を呼び出している個所をコメントアウト。 という手順が楽です。

a--he
質問者

お礼

その通りでした。OnCancel、OnOKは仮想関数でしたね。 ありがとうございました。

その他の回答 (1)

  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

私はいつも、 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キーを押しても何も起こらなくなります。

a--he
質問者

お礼

いい参考になりました。 どうもありがとうございました。