ダイアログベースでのキー入力について

このQ&Aのポイント
  • Win2000、VC++6.0でダイアログベースのアプリを作っています。ボタンの存在しないダイアログにしているため、終了するにはタスクバーから閉じるか、ALT+F4キーだけしかないと思っていましたが、Enterキーを押すと終了してしまうことに気づきました。
  • Enterキーを押すと終了してしまうのを回避する方法を教えてください。
  • WM_CHARメッセージハンドラを追加しましたが、キーを入力してもOnChar関数にやってきません。何を間違えているのかわかりません。
回答を見る
  • ベストアンサー

ダイアログベースでのキー入力について

現在Win2000、VC++6.0でダイアログベースのアプリを作っています。 ボタンの存在しないダイアログにしているので、 終了するにはタスクバーから閉じるか、ALT+F4キーだけしかないと思っていましたが、 Enterキーを押すと終了してしまうことに気づきました。 このEnterキーを押すと終了してしまうのを回避するには どうしればいいのでしょうか? それと、もう一つ質問なのですが、 WM_CHARメッセージハンドラを追加しましたが、 キーを入力してもOnChar関数にやってきません。 (デバッグでブレークポインタを置いてみたのですが・・・) なにを間違えているのかが分かりません。 どうぞよろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tadutch
  • ベストアンサー率20% (2/10)
回答No.1

MFCを使っているなら、クラスウィザードより PreTranslateMessage(MSG* pMsg) を追加して、 WM_KEYDOWN イベントを引っ掛けて、 [Enter]と[Esc]を排除してください。 WM_CHARは使ったことないので知りません。

amoban
質問者

お礼

ありがとうございます! 早速試してみましたが、ESCもENTERも、 見事反応しなくなりました!! それと、WM_CHARをWM_KEYDOWNにして 問題を解決できました! PreTranslateMessage(MSG* pMsg)なんて便利な関数が あるとはしりませんでした(喜)。 本当にありがとうございました!!

関連するQ&A

  • ダイアログベースのEXEでESCキーを押しても終了しないようにする方法

    VC++ 6.0 でダイアログベースのEXEを造っています。 ESCキーを押すとEXEは終了しますが、ESCキーを無視して 終了しないようにするにはどうしたらよいでしょうか? 識者の方、ご教授願います。

  • モードレスダイアログのキー入力について

    VC++6.0で親ダイアログで作成した子ダイアログをモードレスで表示しています。(ShowWindowで表示した後、子ダイアログが終了するまでループ) 両方のダイアログに、OKボタンとキャンセルボタンしかない時には、リターンキー・ESCキーを押せば子ダイアログが終了していました。(親ダイアログにフォーカスがあるときには親ダイアログが終了) ところが、子ダイアログが表示されている間、親ダイアログ上でプログレスバーを表示・更新ようにしたら、とたんにリターンキー・ESCキーが効かなくなり、マウスのクリックでしか終了することができなくなりました。 WEBで調べてPreTranslateMessageを追加して、この関数にブレイクポイントを設定しましたが、呼ばれている様子がありません。 子ダイアログをマウスのボタンクリックで終了させた後は、親ダイアログのPreTranslateMessageでイベントが取得できます。 何をどうしたらリターンキー・ESCキーのイベントが取得できるようになるのでしょうか?

  • エディットでEnterキーでのTAB移動

    Win32APIを使ってプログラミングしています。 通常はTABでフォーカスを移動するのが良いと思うのですが、Enterキーで移動させたいと思います。 ところが、一行のエディットだとEnterキーを押すとビープ音が鳴ってしまいます。 フォーカス移動はできるのですが、ビープ音を鳴らないようにするにはどうすればいいのでしょう? 多分WM_KEYDOWNかWM_KEYUP、WM_CHARのどれかで書けばいいと思ってるんですが… よろしくお願いします。

  • キーボード入力について

    VC++6.0MFCのダイアログベースでデスクトップアプリを作成しています。 現状ですが、まずEscとEnterをクリックすると、 アプリが終了してしまいます。 なぜかわからないのですが、 そもそもキーボード入力を無効にしたいのです。 SetWindowsHookExというAPIを使えばできそうなんですが、 いかんせん、初心者でしてどの部分でどのような記述を すればいいのかがわかりません。 どなたかご教授ください。 よろしくお願いいたします。

  • 起動時に何のダイアログも表示されない

    こんにちは。 大変恐縮ですがこちらで質問させてください。 開発環境はVC2005のMFCです。 質問内容は題名の通りなのですが、デバッグを実行しても何のダイアログが表示されない という状態になってしまいました。 すぐにデバッグが終了してしまいます。(「デバッグなしで開始」でも同様です。) プロジェクトはダイアログベース、スタティックライブラリ、ソケットを使える設定で 作成しました。 プロジェクトを作成してから他ダイアログを作り全てのダイアログに新しくボタンを配置したのと、初期配置のOK,キャンセルボタンを削除した以外は、コード上に手を加えるなどはしていません。 また、以下のようなエラーコードが出力されました。 Dumping objects -> f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {75} normal block at 0x003496B8, 488 bytes long. Data: < > E8 03 00 00 00 00 00 00 E9 03 00 00 00 00 00 00 {74} normal block at 0x00349580, 248 bytes long. Data: < > FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 Object dump complete. プログラム '[1528] test.exe: ネイティブ' はコード 0 (0x0) で終了しました。 何か原因と対策等がわかりましたら回答をいただければと思います。 よろしくお願いします。

  • エディットの入力チェック

    こんばんわ。 エディットボックスをサブクラス化して 入力チェックを行いたいが、 どのMSGでどの様に行ったら良いのでしょうか? 条件 1.数値のみ入力可 2.10~96の時のみ入力可 #条件1と2を満たした数値のみ入力できるようにしたい サブクラス化、条件1は実装済。 WM_CHAR、EN_KILLFOCUS、 EN_UPDATEなどで CString csBuf; GetDlgItem(IDDxxxx)->GetWindowText(csBuf); と書くと、強制終了。 WM_KILLFOCUSで処理する時の引数は、 次のフォーカスのポインタなので、 利用不可。 なんらかの操作をした時に 親ウィンドウプロシージャで入力チェックしても良いのですが、 出来れば、入力したらすぐチェックしたいです。 環境、MFC、VC++6.0です。 条件2の数値が、1桁ならWM_CHARで簡単にできたのですが・・・ 宜しくお願い致します。

  • C# Enterキーの動作について

    お世話になります。 VC#2010にて、フォームにボタンを配置し、そのボタンに フォーカスがあるときにEnterキーを押下すると、そのボタンが 押されたことになってしまいますが、これをさせない方法は ありますでしょうか。 Enterキーは、フォーム側でKeyDown(KeyPress?)処理で 別に行いたいので、押下として反応してしまうと、KeyDownに 処理が飛ばなくなってしまいます。 それを回避する方法です。 何卒よろしくお願いいたします。

  • ダイアログのWM_KEYDOWNで処理を実行したい

    現在、VC++6を用いて、MFC を使わずにアプリケーションを作っている初心者です。 最終的にはWIN_CEハンディーターミナルで動作させる予定です。 ダイアログにフォーカスがある状態で、"↓"キー入力があった場合に処理を行いたいのですが、 ダイアログ及び親ウインドウにWM_KEYDOWNが発生していないみたいなのです。 (SPY++にて確認しました。) DialogBox、CreateDialogの両方でやってみたのですがうまくいきません。 なにか良い方法はありますか? よろしくお願いします。

  • パソコンが・・・

    パソコンにあまり詳しくないのでうまく書けませんが、、、 (1)起動すると壁紙が現れ、いきなり「強制終了します」と表示 (2)tabキー、enterキーのみしか使用できない (3)(1)の画面にアイコンやタスクバーも表示せずポインターと壁紙のみの状態 (4)ctrl+Alt+Deleteキー押すと再起動するが、また(1)からの繰り返し (5)再インストールをしようにもリカバリCDも読み込まず どうにもこうにも困っています。色々試しましたがどれも駄目でした。 もう7年目なので替え時なのでしょうか・・・ 上記のみの説明ではご理解いただけないかもしれませんがどなたかご指導願います。

  • Win32APIを使って入力されたキーによって表示する画像を変えるプログラムについて

    Win32APIを使って入力されたキーによって表示する画像を変えるプログラムを今、VisualSutudio2005のVC++で作っている最中なのですが、 上手く画像が表示されず困っています。具体的には、キーボードからキーが入力されたらTranslateMessage関数でWM_CHARメッセージを送って、その値(wParam)をWM_CHARメッセージ内でTCHAR型の変数に代入し、InvalidateRect関数を使ってWM_PAINTメッセージを送って、再描画処理を行ってその中で、if(tchar == 'a') { hbitmap = (HBITMAP)LoadImage(NULL,BMP,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SelectObject(hMemdc,hbitmap); GetObject(hbitmap,sizeof(BITMAP),&bitmap); BitBlt(painthdc,0,0,350,467,hMemdc,0,0,SRCCOPY); } という処理をしてaが入力されたら読み込んだ画像を表示!という形にしたいのですが、実際ウィンドウには表示されなくて悩んでいます。わかりにくくて誠に申し訳ありませんが、どなたかどうかご教授願えないでしょうか。何卒よろしくお願い致します。

専門家に質問してみよう