はじめまして。
今自作のメニューを作成しているのですが、メニューバー上の項目を押してポップアップ
メニューが出ている状態のときにメニューバー外をクリックした場合、ポップアップメ
ニューを閉じるようにしたいのですが、メニューバー外のクリックを感知するのはフック
以外の方法ではできないのでしょうか?
よろしくおねがいします。
すいません、マウスキャプチャーでできました。
解決です。
何度もすいません。
マウスキャプチャーはマウスを押してるときしかしたらダメなこと忘れてました(笑)
クリック検知じゃないけど
メニューウィンドウにフォーカスもたせて
フォーカス失うときメニューも消える。
フォーカスだとタイトルバーをクリックしたときになぜかWM_KILLFOCUSが呼ばれないので
無理でした。。
どうやらそのようですね。
実際のメニューってどうやっているんだろう。
たぶんモーダルだから独自のメッセージループを持っているんだろうな。
それがわかれば苦労しないか。
併用すればいいだけの気もするけど。
すいません併用とはどういうことでしょうか?
>マウスキャプチャーはマウスを押してるときしかしたらダメなこと忘れてました
マウスを押し下げた状態からでなくても SetCapture で
自スレッド画面外でのWM_LBUTTONDOWN/UPは拾える。
(WM_MOUSEMOVEは拾えないけどね)
↓Advanced Windowsからの引用
ユーザーが他のスレッドによって作成されたウィンドウを
アクティブにしようとした場合には、システムは自動的に
キャプチャーを設定したスレッドにマウスボタン押下、
マウスボタン開放メッセージを送る。
くどいかもしれないけど、(^^;
> したらダメ
他スレッドウィンドウ上のWM_MOUSEMOVEが拾えない
ないという制約が付くだけで、してもよい(「禁止」ではない)。
>ITOさん
すいません説明不足でした。
メニューバーからポップアップメニューまですべて独自のものを作っているという意味です。
>sxさん
わかりやすい説明ありがとうございます。
キャプチャーについて勘違いしてました。
キャプチャーでは実装してみます。
どうもありがとうございました。
メッセージループで自アプリのウィンド上でのマウスクリックが取れるはず。
メニュー外のクリックまたはフォーカスが別のアプリに切り替わるとき
メニューを消せばいいんじゃないの。
これで上手く行くかどうか知らんけど。