お世話になります。
環境:WinXP-pro Vc++6.0 MFC Dialogベース
MFCAppWizardでダイアログスケルトンを
作成して、デフォルトのOKボタンを
削除しているのに、Enterキーを押すと
OnOK()が呼ばれてダイアログが終了して
しまいます。
過去ログに下記のような投稿があり、内容を
読ませてもらったのですが、勉強不足で
よく理解できません。
>OnOK()やPreTranslatemassage()で終了させないようにすることはできるのですが、
>どのような仕組みでOnOK()が呼ばれているのでしょうか?
>コールスタックを見ると、_AfxDispatchCmdMsgやCCmdTarget等が書かれています。
具体的にどのようにして終了しないように
するのかどなたかご教示頂けないでしょうか?
またコールスタックとはどのようにして見る
のでしょうか?
初歩的な質問で申し訳ありませんが宜しくお願いします。
> 具体的にどのようにして終了しないように
> するのかどなたかご教示頂けないでしょうか?
OnOK()の中で、CDialog::OnOK()を呼び出さないようにします。
早速の返答有難うございます。
新規に作成したdialogでOnOK()の中で、CDialog::OnOK()
を呼び出さないようにすれば、終了しない事が確認できました。
実は既存のプロジェクトに同じ事をやろうとしたのですが、
ClassWizardのメッセージマップタブのオブジェクトIDの欄に
IDOKがなくOnOK()が追加できない事が分かりました。
多分いろいろ試しているうちに削除してしまったと思うのですが、
一度削除したIDOKは復元できないのでしょうか?
あるいは手動でOnOK()を追加する方法をご教示願えないでしょうか?
たびたび初歩的な質問ですみませんが宜しくお願い致します。
> 一度削除したIDOKは復元できないのでしょうか?
> あるいは手動でOnOK()を追加する方法をご教示願えないでしょうか?
一時的にIDOKというIDのボタンをリソースに追加して、
ハンドラを追加したら、ボタンを削除してしまえばよいです。
このとき、クラスウィザードがどのようなコードを追加するのか
見ておけば、今後は手動でも追加できるでしょう。
リソースエディタでボタンを貼り付け、
そのボタンのIDを「IDOK」にしてメッセージハンドラを作り、
その後「IDOK」ボタンを削除するとよろしいかと。
手動で追加するなら
class CMyDialog : pulic CDialog
{
…
virtual void OnOK(void);
…
};
void CMyDialog::OnOK(void)
{
if (IDOK で終わりたい場合の条件) {
CDialog::OnOK();
}
}
こんな感じでしょうか。
あまりMFCを使用しないので手動追加のコードはあやしいです;;
dairygoodsさん、U-t さん
適切なアドバイス有難うございました。
おかげですぐに解決する事ができました。
今後とも宜しくお願いします。