• 締切済み

ダイアログベースのウィンドウメッセージについて

Win2kのVC++6.0 MFC ダイアログベースでのウィンドウメッセージ処理で困っています。 OnCharがダイアログでは認識できません。ウィンドウでは認識できます。 何か特別な処理が必要なのでしょうか?

  • Nickee
  • お礼率79% (107/134)

みんなの回答

  • txrx
  • ベストアンサー率45% (83/184)
回答No.1

ダイアログの場合は、コントロールが少なからず配置されていると思います。 例えばエディットボックスとか・・・。 OnCharは、フォーカスのあるコントロールへ送信されるので、フォーカスを持ったコントロールがあれば、ダイアログでは認識できないと思いますが・・・。 フォーカスを持っているコントロールが一つもなく、ダイアログがフォーカスを持っていれば、ダイアログへOnCharが送信されるはずです。 ダイアログもウィンドウなので・・・。 でもそんなことできたなか? ダイアログベースでコントロールの無いダイアログなんて無意味なので、やったことありません。 あくまでも理屈なので後はご自分でお調べになるか、別の回答者をお待ちください。

Nickee
質問者

お礼

パソコンへの入力情報を処理したく、ダイアログベースに処理結果を受け渡したっかただけです。  私なりに調べたところ、システムフックを使用すれば、いけそうなことが分かりました。(まだ確認はできていませんが。。。)  txrxさんしかご回答頂いておりませんが、これで、締め切らせて頂きます。ありがとうございました。

関連するQ&A

  • ダイアログのテキストにマウスカーソルが乗ったときの処理

    MFC(VC++6.0)のダイアログベースでプログラムを製作していますが、 そのテキストにマウスカーソルが乗ったときに処理をさせたいです。 そして、マウスカーソルがテキストから離れたときにも処理をさせたいです。 どういうメッセージが送られてくるのかが知りたいので、 ご存知の方、ご教授お願いします。 わかりやすく言うと、ダイナミックHTMLの OnMouseOverとOnMouseOutみたいな処理をさせたいのです。

  • ダイアログベースの再描画について

    現在VC++6.0、MFC、ダイアログベースでアプリケーションの作成を行っているのですが、長いことつまづいてしまっているので質問させていただきます。 もともとあるアプリケーションに機能を追加、ということを行っているのですが、リソースで作ったボタンとエディットボックスが、ダイアログの最小化や最大化を行うと再描画されずに消えてしまいます。しかし、元々作ってあったボタンやエディットボックスはそのまま正常にのこっています。このアプリケーションの作成者には連絡することができず、ネットでも情報を探しましたが、解決しません。これを解決するにはどういった修正が必要でしょうか? 知識不足のため説明不足や、説明に間違いがあるかもしれませんが、ご教授願えますと幸いです。

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

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

  • ダイアログ間のメッセージの送信について

    いつもお世話になっております。 現在、Visual Studio 2005にてMFCのダイアログベースのアプリケーションを作成しており、メッセージの送信の件で詰まった箇所があり質問させて頂きました。 現在のアプリケーションの全体像なのですが、 ダイアログベースなので、アプリケーション立ち上げ時に1つメインダイアログが表示されます。 そのメインダイアログ内にボタンを設置したとして、それぞれのボタン1,ボタン2からダイアログ1,ダイアログ2をDoModal()で表示させます。 それぞれのダイアログ1,2にはボタンが1つずつ設置されているとします。 質問させて頂きたいことは メインダイアログへダイアログ1,2からメッセージ送信をする場合には ::SendMessage(GetParent()->GetSafeHwnd(),MYMSG,0); でメッセージ送信をすることは出来ました。 しかしメインダイアログから呼び出されるダイアログ1,2間でメッセージを送信する場合に,例えばダイアログ1からダイアログ2へメッセージを送信させたいときに void C****1Dlg::OnBnClicked(){ C****2Dlg m_dlg2; ::SendMessage(m_dlg2.GetSafeHwnd(),MYMSG,0); とダイアログ1のボタンクリック時の関数内にコードを入力してもダイアログ2へメッセージは送信されず(ダイアログ2内のメッセージ受信関数OnMyMsg()が呼ばれず)、そのままスルーされるようなのです。 上述のコードで何か間違えている箇所があるでしょうか? メッセージを扱うのは初めてで、とにかく相手先のウィンドウのハンドルを取得できればいいのかなと思ってコードを書いてみたのですが。。 ご存知の方がいらっしゃいましたら、ご意見宜しくお願い致します。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • ダイアログ画面全体をマウスで動かせるようにするには

    VC++、MFC、WindowsXPです。 現在の状況としてはは ダイアログベースによる作成。 ダイアログにオーナー描画でビットマップを貼り付けている。 という感じです。 普通ウィンドウのタイトルバーをマウスで押してウィンドウの位置を動かしますが、たまに画面のどこを押しても動かせるようなウィンドウがありますが、あれは一体どうやっているのでしょうか? よろしくお願いします。

  • ダイアログをアクティブにするには?

    よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて ダイアログを非表示から dlg->ShowWindow(SW_SHOW);にて 表示にしましたが、アクティブ状態になっていません。 アクティブにするにはどうすれば良いですか?

  • ウィンドウの再描画

    よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて ウィンドウをクリックしてダイアログを表示。 ダイアログのボタン押し下げでウィンドウを再描画させたいのですがどうすれば良いですか?

  • windows終了時のメッセージについて

    いつもお世話になります。 VC++6.0MFCダイアログベースでデスクトップアプリ を作成しているものです。 アプリ終了でINIファイルにウィンドウ位置を記憶させ 次回起動時に終了位置に表示させているのですが、 アプリが立ち上がったまま、スタートメニューからウィンドウズ自体を 終了させた時、アプリにはどのようなメッセージが飛んできているのか どなたか教えていただけないでしょうか? よろしくお願い致します。

  • ダイアログウィンドウの初期化メッセージ

    Win32API入門(http://wisdom.sakura.ne.jp/system/winapi/)を見ながら、BCC32でGUIプログラミングの勉強をしています。 現在、以下URLのサンプルのように、ダイアログアプリケーションとして自作のソフトを作ろうとしています。 http://wisdom.sakura.ne.jp/system/winapi/win32/win89.html さて、通常のダイアログ上のコントロールを初期化する際は、ウィンドウプロシージャでWM_INITDIALOGを補足するのが常套手段だと思いますが、上記サンプルのように、ダイアログアプリケーションとしてダイアログを生成した場合、WM_INITDIALOGが発行されないようです。 そこで、WM_CREATEを利用しようとしましたが、WM_CREATEが発行された時点では、GetDlgItem()等によるダイアログ上のコントロールのハンドル取得ができないようで、困ってしまいました。 ダイアログアプリケーションの初期化は、どのように行うのが正しいのでしょうか? WinMain()で、CreateDialog()の直後に初期化処理を行えば、ひとまず目的は達成するのですが、WinMain()内での処理は何となく邪道のような気がして、質問させていただきました。

  • MFC 6.0 VC++ で、処理が重くなります。

    MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? そもそもダイアログベースで画像処理をしているのが間違いな気もするのですが・・・。

専門家に質問してみよう