none
MFC ダイアログベースで OnOKがオーバーライドできません RRS feed

  • 質問

  • MFC アプリケーション作成中でのことです。

    リソースビューにて OKボタンを右クリック

    イベントハンドラをクリック。

    void Cmfc001Dlg::OnBnClickedOk()
    {
     // TODO: ここにコントロール通知ハンドラ コードを追加します。
     OnOK();
    }

    すると、このようなのが できました。

    VC++6.0 では

    void CChk323Dlg::OnOK()
    {
     // TODO: この位置にその他の検証用のコードを追加してください
      
     CDialog::OnOK();
    }

    これが できたので どこかに OnOK() があるはず と思ってさがしているのですが 宣言しか 見つかりません。

    protected:
     virtual void OnOK();  <- これです。

     

    どなたか ご存知ありませんか?

    さらに 

    #endif
     virtual BOOL PreTranslateMessage(MSG* pMsg);

    これも オーバーライドしたいのですが どうすればよいか ご存知ありませんか?

    ちなみに クラスビューから 関数の追加 で 自分で追加してやると

    それらしく 動いています。

    BOOL Cmfc001Dlg::PreTranslateMessage(MSG  * pMsg)
    {
     
     int  i  =  0;

     if  (  pMsg->message  ==  WM_KEYDOWN  )
     {
      m_pCurpos  =  m_pCurpos->GetFocus();

      i  =  m_pCurpos->GetDlgCtrlID();

      switch(  pMsg->wParam  )
      {
      case  VK_RETURN:

       NextDlgCtrl();

       if  (  i  ==  IDC_BSTART  )
       {
    //    OnBstart();

       }

       if  (  i  ==  IDOK  )
       {
        OnOK();

       }

       if  (  i  ==  IDCANCEL  )
       {
        OnCancel();

       }

       pMsg->wParam  =  NULL;

       break;

      case  VK_UP:

       PrevDlgCtrl();

       break;

      case  VK_DOWN:

       NextDlgCtrl();

       break;

      default:

       break;

      }  //  switch(  pMsg->wParam  )

     }  //  if  (  pMsg->message  ==  WM_KEYDOWN  )
      
     return CDialog::PreTranslateMessage(pMsg);
    }

    クラスビューの下側で見てみると

    =□PreTranslateMessage(MSG* pMsg)

    =□PreTranslateMessage(MSG* pMsg)

    と ならんでしまっています。

    どなたか、ご存知ありませんでしょうか?

     


    2007年2月10日 4:57

回答

  •  丸中太郎 さんからの引用

    リソースビューにて OKボタンを右クリック

    イベントハンドラをクリック。

    イベントハンドラの名の通り、これは CButton の BN_CLICKED イベントハンドラの追加になります。

    CDialog のメンバ関数のオーバーライドは、下記の手順で行ってください。

    1. クラスビューを選択して表示
    2. CDialog 派生クラスの CXXXDlg クラスを選択
    3. プロパティウィンドウのツールバーアイコンの左から5番目の「オーバーライド」をクリック
    4. 一覧から OnOK を選択して、ドロップダウンから 「<追加> OnOK」を選択

    PreTranslateMessage のオーバーライドも同じです。

    2007年2月10日 7:04

すべての返信

  •  丸中太郎 さんからの引用

    リソースビューにて OKボタンを右クリック

    イベントハンドラをクリック。

    イベントハンドラの名の通り、これは CButton の BN_CLICKED イベントハンドラの追加になります。

    CDialog のメンバ関数のオーバーライドは、下記の手順で行ってください。

    1. クラスビューを選択して表示
    2. CDialog 派生クラスの CXXXDlg クラスを選択
    3. プロパティウィンドウのツールバーアイコンの左から5番目の「オーバーライド」をクリック
    4. 一覧から OnOK を選択して、ドロップダウンから 「<追加> OnOK」を選択

    PreTranslateMessage のオーバーライドも同じです。

    2007年2月10日 7:04
  •  

      chack - Akira Inoueさん ありがとうございます。

     

      解決いたしました。

     

    2007年2月10日 8:29