ダイアログでEnterキーで終了しないようにするには – プログラミング – Home

ダイアログでEnterキーで終了しない...
 
通知
すべてクリア

[解決済] ダイアログでEnterキーで終了しないようにするには


takety
 takety
(@takety)
ゲスト
結合: 23年前
投稿: 18
Topic starter  

お世話になります。

環境:WinXP-pro Vc++6.0 MFC Dialogベース

MFCAppWizardでダイアログスケルトンを
作成して、デフォルトのOKボタンを
削除しているのに、Enterキーを押すと
OnOK()が呼ばれてダイアログが終了して
しまいます。

過去ログに下記のような投稿があり、内容を
読ませてもらったのですが、勉強不足で
よく理解できません。

>OnOK()やPreTranslatemassage()で終了させないようにすることはできるのですが、
>どのような仕組みでOnOK()が呼ばれているのでしょうか?
>コールスタックを見ると、_AfxDispatchCmdMsgやCCmdTarget等が書かれています。

具体的にどのようにして終了しないように
するのかどなたかご教示頂けないでしょうか?
またコールスタックとはどのようにして見る
のでしょうか?

初歩的な質問で申し訳ありませんが宜しくお願いします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 具体的にどのようにして終了しないように
> するのかどなたかご教示頂けないでしょうか?

OnOK()の中で、CDialog::OnOK()を呼び出さないようにします。


返信引用
takety
 takety
(@takety)
ゲスト
結合: 23年前
投稿: 18
Topic starter  

早速の返答有難うございます。

新規に作成したdialogでOnOK()の中で、CDialog::OnOK()
を呼び出さないようにすれば、終了しない事が確認できました。

実は既存のプロジェクトに同じ事をやろうとしたのですが、
ClassWizardのメッセージマップタブのオブジェクトIDの欄に
IDOKがなくOnOK()が追加できない事が分かりました。
多分いろいろ試しているうちに削除してしまったと思うのですが、
一度削除したIDOKは復元できないのでしょうか?
あるいは手動でOnOK()を追加する方法をご教示願えないでしょうか?

たびたび初歩的な質問ですみませんが宜しくお願い致します。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 一度削除したIDOKは復元できないのでしょうか?
> あるいは手動でOnOK()を追加する方法をご教示願えないでしょうか?

一時的にIDOKというIDのボタンをリソースに追加して、
ハンドラを追加したら、ボタンを削除してしまえばよいです。

このとき、クラスウィザードがどのようなコードを追加するのか
見ておけば、今後は手動でも追加できるでしょう。


返信引用
U-t
 U-t
(@U-t)
ゲスト
結合: 22年前
投稿: 14
 

リソースエディタでボタンを貼り付け、
そのボタンのIDを「IDOK」にしてメッセージハンドラを作り、
その後「IDOK」ボタンを削除するとよろしいかと。

手動で追加するなら
class CMyDialog : pulic CDialog
{

virtual void OnOK(void);

};

void CMyDialog::OnOK(void)
{
if (IDOK で終わりたい場合の条件) {
CDialog::OnOK();
}
}
こんな感じでしょうか。
あまりMFCを使用しないので手動追加のコードはあやしいです;;


返信引用
takety
 takety
(@takety)
ゲスト
結合: 23年前
投稿: 18
Topic starter  

dairygoodsさん、U-t さん
適切なアドバイス有難うございました。
おかげですぐに解決する事ができました。

今後とも宜しくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました