• ベストアンサー

子ウィンドウに発生したイベント

親ウィンドウ内に子リストウィンドウを作り 子リストウィンドウを左クリックしたときに 「子リストウィンドウに何かイベントが発生した」 ということを 子リストウィンドウにメッセージを送ってもらうことなく 親ウィンドウが知る方法は有るのでしょうか? 子リストウィンドウのウィンドウ処理関数を作りたくないのでできるだけ子リストウィンドウの処理はデフォルト処理で済ませたいのですが・・・

  • keyguy
  • お礼率68% (895/1314)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

WM_COMMANDでLBN_~のメッセージは親ウィンドウに送られてきているはずです。 それ以外のメッセージを取得するにはサブクラス化 するしかないです。

keyguy
質問者

補足

ありがとうございます。 WM_PARENTNOTIFY で子リストボックスが左クリックされたという情報は得られるのですが 子リストボックスの選択項目に応じて親ウィンドウに画像を表示させる場合 左クリック時点では選択項目が左クリック前の選択項目なので親ウィンドウに表示される画像が1左クリック分遅れて表示されてしまいます。 それを回避するためにタイマーを使うことしか思い浮かばないのですが他に方法はあるのでしょうか?

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>子リストボックスの選択項目に応じて親ウィンドウに画像を表示させる場合 >左クリック時点では選択項目が左クリック前の選択項目なので親ウィンドウに表示される画像が1左クリック分遅れて表示されてしまいます。 普通はそんな時にマウスメッセージは使用しません。 なぜならリストボックスはキーボードで操作可能だからです。 システムが準備しているコントロールに標準的な動作を期待しているのであれば、自分で特殊なことはしないほうがいいですよ。 なんで、素直にLBN_SELCHANGEを使用しましょう。

keyguy
質問者

お礼

ありがとうございます。 今まではすべての子ウィンドウのIDをNULLにしていましたがNO1の指摘の通り素直に リストボックスにID番号を打ちCOMMANDメッセージのそのIDに応答する方法が一番良さそうです。

関連するQ&A

  • マウスイベントが発生しません

    マウスイベントに詳しい方教えて下さい。 Windows上のプログラミングで TImageコンポーネント上でマウスを左クリックさせると、 通常はOnMouseDown→OnClick→OnMouseUpの順で イベントが発生します。 ただ、たまにOnMouseUpイベントが発生せず エラーが発生してしまう事が起こってしまいました。 常に起こるわけではなく、何かのタイミングで起こります。 ただ、何が原因かは全然つかめていません・・・。 OnMouseUpイベントをキャンセルしてしまう 処理って存在するのでしょうか? 特にPeekMessageなどは使用していません。 もし、以上のような事が起こる原因をご存知の方、 お教え願えますか? よろしくお願い致します。

  • テキストの値が代入された後にイベントを発生させたい

    親ウィンドウと子ウィンドウがあります。 親ウィンドウのテキストボックスのvalueに、子ウィンドウの関数内で値を代入します。 親ウィンドウでテキストボックスの値が書き換えられますが、そのときにイベントを発生させたいのですが、 何か良い案はありますでしょうか? なお、子ウィンドウでは、親画面のテキストボックスに値を代入するのみで、 親ウィンドウの関数を呼び出すことはできない とします。

  • イベントの発生から対応する処理実行までの作り方

    以前に、ボタンクリックなどのイベントが起きたら すぐにそのボタンクリックに対応した処理をその場(イベント ハンドラ)で実行するのではなく、 "イベントが発生しました関数"のようなものに最初に イベント情報を渡してしまい、あとはその関数からイベントが 振り分けられていき、最終的にそのイベントに対応した処理が 実行される。といったプログラムを見たことがあるのですが、 このような技法は一般的に行われるものなのでしょうか? 巨大なプログラムになるとこのような技法が使われる気が しますが・・・ また、この技法には何か名前がついているのでしょうか? また、これに関して記載しているサイト・書籍などありましたら 教えてください。

  • 子ウィンドウより親ウィンドウのフォームをsubmit

    親ウィンドウより子ウィンドウをwindow.openにて 表示し、 parent.window.opener.document.form.コントロール名.value="111"; というふうに、子ウィンドウより親ウィンドウのコントロールに値をセットしています。これに親ウィンドウのフォームをsubmitするという処理を追加したいのですが、可能なのでしょうか?? もし可能であれば、その方法を教えてください。 よろしくお願いします!!!! また、子ウィンドウより親ウィンドウのコントロールに値をセットした場合、親ウィンドウのonchangeイベントは発生しないようなのですが、この解消方法はないでしょうか?? よろしくお願いします!!!!

  • フォーカスが親ウインドウから子ウィンドウに移る際のイベントは?

    フォーカスが子ウィンドウに移ったとき、もしイベントが発生すれば、それを子ウィンドウのスクリプトでonXXXX とやって、活用し、たとえば子ウィンドウ上に置いたfocus on/off のボタン表示に反映したいのです。そんなイベントはありますか?  あるいは、子ウィンドウからフォーカスが離れるときに、あとで再びフォーカスが子ウィンドウに戻って来るときに備えて、ボタンをon にしておく方法もありますが、こちらの手でいくためには、フォーカスが離れる際のイベントがどうも onBlur() ではうまくいきません。 どうかよろしくお願い致します。

  • 親ウィンドウのメッセージを子ウィンドウで処理する

    親ウィンドウに入ってくるメッセージを子ウィンドウ(ダイアログ)のメッセージマップで処理したいと思ってますが、どうにもできません。なにかよい方法はないでしょうか? 処理したいメッセージはESCが押されたかどうかだけなので、親で受けたメッセージを子供にSendMessageすればよいのですが、できれば、親で受けたメッセージすべてを子供にそのまま渡すというようなことができたらうれしいです。 ATL/WTLでの書き方だともっとうれしいです。 どうぞよろしくお願いします。

  • イベントを発生させたウィンドウに通知しない方法は?

    グローバルマウスフックには成功しました。 しかし、フックによって得たイベントを発生させたウィンドウにもそのイベントが通知されます。 (例えば、右クリックをフックしたとしても、カーソル位置のウィンドウのポップアップメニューを開いてしまいます。) これを通知しないようにしたいのです。 しばらく試行錯誤をしましたが、分かりません。 何かよい方法をご存知でしょうか? ご教授願います。

  • 子ウィンドウのデフォルトウィンドウプロシージャについて

    ある本に例えばトップレベルウィンドウがいずれもキーボード入力のメッセージを処理せず、デフォルトウィンドウプロシージャに渡していたするとそのメッセージは親ウィンドウすなわちトップレベルウィンドウへと渡されると載っていたのですが、どういった場合がそうなるのでしょうか?できればプログラムでわかりやすくお願いします。

  • スレッド中でウインドウのイベント(Windows)

    カテゴリー違いかもしれませんが、 Windowsでスレッド中でウインドウを生成すると、 イベントの処理ができなくなります。 (たぶんもとのイベントループにメッセージがいって  そこで終わっていると思うのですが) これを避ける方法とかあるのでしょうか? メインループにメッセージを送ってそこでウインドウを 生成してもらうのが由緒正しい方法なのでしょうか? 用語とかむちゃくちゃかもしれませんが よろしくお願いします。

  • javascriptのイベント処理につきまして

    左クリックをした時と、クリックを解除をした時 右クリックをした時と、クリックの解除をした時 クリックを解除した時は共通の処理を行います。 左クリックをした時と、右クリックをした時の処理は分けたいと思っているのですが、上手くいきません。ご教授願えますでしょうか・・・。 [ mousedownとmouseup ] この場合、クリックした瞬間にmousedownイベントが走り、クリックを上げた瞬間にmouseupイベントができます。 ただし、右クリックでも同様の処理が走ってしまいます。 [ contextmenu と onclick ] 上記を利用すると、右クリックはcontextmenu処理を行い、左クリックはonclick処理を行いますが、この2つのイベントはマウスが押されて離された瞬間にイベントが発生しますので、mouseup処理が先に処理してしまします。 よろしくお願い致します。

専門家に質問してみよう