画面外でのクリック

[戻る]
pp 2007/12/05(水) 18:52:32
はじめまして。

今自作のメニューを作成しているのですが、メニューバー上の項目を押してポップアップ
メニューが出ている状態のときにメニューバー外をクリックした場合、ポップアップメ
ニューを閉じるようにしたいのですが、メニューバー外のクリックを感知するのはフック
以外の方法ではできないのでしょうか?

よろしくおねがいします。

pp 2007/12/05(水) 19:31:11
[[解決]]
すいません、マウスキャプチャーでできました。

解決です。

pp 2007/12/05(水) 19:39:08
何度もすいません。

マウスキャプチャーはマウスを押してるときしかしたらダメなこと忘れてました(笑)

wclrp ( 'o') 2007/12/05(水) 20:06:34
クリック検知じゃないけど

メニューウィンドウにフォーカスもたせて
フォーカス失うときメニューも消える。

pp 2007/12/05(水) 20:19:45
フォーカスだとタイトルバーをクリックしたときになぜかWM_KILLFOCUSが呼ばれないので
無理でした。。

wclrp ( 'o') 2007/12/06(木) 00:14:22
どうやらそのようですね。

wclrp ( 'o') 2007/12/06(木) 00:17:00
実際のメニューってどうやっているんだろう。
たぶんモーダルだから独自のメッセージループを持っているんだろうな。
それがわかれば苦労しないか。
併用すればいいだけの気もするけど。

pp 2007/12/06(木) 00:58:30
すいません併用とはどういうことでしょうか?

ITO 2007/12/06(木) 10:15:58
>今自作のメニューを作成しているのですが、

ん? SDK?ですか?

参考になりませんか
http://www.kumei.ne.jp/c_lang/sdk/sdk_06.htm

sx 2007/12/06(木) 11:10:09
>マウスキャプチャーはマウスを押してるときしかしたらダメなこと忘れてました
マウスを押し下げた状態からでなくても SetCapture で
自スレッド画面外でのWM_LBUTTONDOWN/UPは拾える。
(WM_MOUSEMOVEは拾えないけどね)

sx 2007/12/06(木) 11:30:15
↓"Advanced Windows"からの引用
ユーザーが他のスレッドによって作成されたウィンドウを
アクティブにしようとした場合には、システムは自動的に
キャプチャーを設定したスレッドにマウスボタン押下、
マウスボタン開放メッセージを送る。

sx 2007/12/06(木) 11:36:42
くどいかもしれないけど、(^^;
> したらダメ
他スレッドウィンドウ上のWM_MOUSEMOVEが拾えない
ないという制約が付くだけで、してもよい(「禁止」ではない)。

pp 2007/12/06(木) 20:11:39
>ITOさん
すいません説明不足でした。
メニューバーからポップアップメニューまですべて独自のものを作っているという意味です。

>sxさん
わかりやすい説明ありがとうございます。
キャプチャーについて勘違いしてました。
キャプチャーでは実装してみます。


どうもありがとうございました。

wclrp ( 'o') 2007/12/06(木) 20:26:23
メッセージループで自アプリのウィンド上でのマウスクリックが取れるはず。
メニュー外のクリックまたはフォーカスが別のアプリに切り替わるとき
メニューを消せばいいんじゃないの。
これで上手く行くかどうか知らんけど。

古いスレッドには追加発言できません。