トップ回答者
MFC ダイアログベースで OnOKがオーバーライドできません

質問
-
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)
と ならんでしまっています。
どなたか、ご存知ありませんでしょうか?
回答
-
丸中太郎 さんからの引用 リソースビューにて OKボタンを右クリック
イベントハンドラをクリック。
イベントハンドラの名の通り、これは CButton の BN_CLICKED イベントハンドラの追加になります。
CDialog のメンバ関数のオーバーライドは、下記の手順で行ってください。
- クラスビューを選択して表示
- CDialog 派生クラスの CXXXDlg クラスを選択
- プロパティウィンドウのツールバーアイコンの左から5番目の「オーバーライド」をクリック
- 一覧から OnOK を選択して、ドロップダウンから 「<追加> OnOK」を選択
PreTranslateMessage のオーバーライドも同じです。
すべての返信
-
丸中太郎 さんからの引用 リソースビューにて OKボタンを右クリック
イベントハンドラをクリック。
イベントハンドラの名の通り、これは CButton の BN_CLICKED イベントハンドラの追加になります。
CDialog のメンバ関数のオーバーライドは、下記の手順で行ってください。
- クラスビューを選択して表示
- CDialog 派生クラスの CXXXDlg クラスを選択
- プロパティウィンドウのツールバーアイコンの左から5番目の「オーバーライド」をクリック
- 一覧から OnOK を選択して、ドロップダウンから 「<追加> OnOK」を選択
PreTranslateMessage のオーバーライドも同じです。
-