ダイアログベースでのEnterキーとESCキーの検知方法について – プログラミング – Home

ダイアログベースでのEnterキーとE...
 
通知
すべてクリア

[解決済] ダイアログベースでのEnterキーとESCキーの検知方法について


国士無双
 国士無双
(@国士無双)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

多分、この手の質問は過去ログを見ればあるのでしょうが、あまりにログがあり検索に
断念してしまったため、失礼を承知で新規という形で質問させて頂きたいと思います。

VC++ .NET MFC です。
ダイアログ上でEnterキーまたはESCキーを押下するとダイアログが閉じてしまうのです
が、どうすれば回避できるのでしょうか?

すみませんがよろしくおねがいいたします。


引用未解決
トピックタグ
晃
 晃
(@晃)
ゲスト
結合: 20年前
投稿: 9
 

http://rararahp.cool.ne.jp/vc/vctips/exit.htm

ここのVC++Tips・・・これのことですよね?


返信引用
Takahashi
 Takahashi
(@Takahashi)
ゲスト
結合: 21年前
投稿: 45
 

一番上の例だと終了できなくなってしまうし、
PreTranslateMessage は、しらんでいじると副作用が怖いし・・・

OnCancel() をオーバーライドして

::GetKeyState(VK_ESCAPE)

を使用してESCキーが押されている場合終了できなくする。

ちなみに OnOK の場合はリターンキー。

これの方が一番お手軽では?
(ちがってたらごめんなさい)


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

IDOKのイベントでOnOKのようにして
CDialog::OnOK();
をコメントにすればEnterは回避できますね。

あんまり良くないかもしれませんが、
ESCの方は WM_CLOSE と IDCANCEL のイベントの
OnClose と OnCancel でどうにかできると思います。

閉じる、ALT+F4は
OnClose ⇒ OnCancel

Escは
OnCancel

が呼ばれるので、OnCloseでフラグセットして
OnCancelで判断という方法でもできるような。

ただしこの方法がいいのか悪いのかはちょっとわかりません(;^_^A


返信引用
Takahashi
 Takahashi
(@Takahashi)
ゲスト
結合: 21年前
投稿: 45
 

> CDialog::OnOK();
> をコメントにすればEnterは回避できますね。

コメントアウトしてしまうと、OKボタンをマウスで押しても
ダイアログが終了しなくなってしまうのでは?

ああ・・・そもそも、OKボタンが必要ないならそれでいいのかな。
そうだったら、YOU さんのコメントアウトする方法が一番簡単ですね。


返信引用
たく
 たく
(@たく)
ゲスト
結合: 21年前
投稿: 29
 

そもそも、EnterとESCで閉じないダイアログは
Windowsの作法に反してますが・・・
純粋にEnterキーとESCキーの検知したいのであれば
PreTranslateMessage以外に方法は無いのではないかと思います。


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

はじめましてBosscatと申します。
たまたま立ち寄ったので、ついでに辻レスを・・・

ダイアログを閉じずに何がしたいかに拠るのですが・・・
まあ、仕事ならば、何でも有りで作法云々も言ってられないことがありますよね(TT;

もし、ダイアログWindowループに依存したく無い処理が必要であれば
(あまり想像できませんが、、、Windowのキーイベントは当然試した後だと思うので)
キーフックという手もあります。

が、こんなモノに頼るようだと、その考え方自体が間違っていると思うので
最終手段だと思ってください。

こんな感じ
HHOOK hKHook_=SetWindowsHookEx( WH_KEYBOARD,(HOOKPROC)KHookProc,hWnd,0);

ちなみにDLL化してあげるとWindows全体からキーイベントが取れます。
前に「猫でもわかる」で解説していた気がする・・・


返信引用
国士無双
 国士無双
(@国士無双)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

みなさま、どうもありがとうございます。
いろいろなやり方を示していただいたので検討して採用させていただきます


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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