- - PR -
ContextMenu表示中のマウスイベント
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-08 20:49
【環境】
OS:WindowsXPPro VS:VS.NET2005 言語:C# AP:Windowsアプリ 以下の機能を持つUserControlを作成しています。 ・通常時とマウスオーバー時でイメージを替えて表示する ・左クリックするとContextMenuを表示する このコントロールでContextMenu表示中にマウスポインタを移動しても マウスイベントが飛んでこないためイメージが切り替わりません。 ContextMenu表示中にイメージを切り替えるには、どのようなアプローチが あるのかご意見を下さい。 ちなみにContextMenuではマウスをキャプチャしている様子はありませんでした。 | ||||
|
投稿日時: 2007-02-08 21:50
こんばんは。
ポップアップメニュー表示中は、メニューモーダルループに入るため ウィンドウメッセージが各ウィンドウにディスパッチされていないからでしょう。 対処方法は… ポップアップメニューを自作する…でしょうか? | ||||
|
投稿日時: 2007-02-09 09:40
回答ありがとうございます。
「メニューモーダルループ」ですか… メニュー自体がモードレスなのでモーダルループに入っているとは思いもしませんでした。 でも自作は避けたいところです。 他の解決策もお待ちしています。 | ||||
|
投稿日時: 2007-02-09 10:21
こんにちは。
ホバー表示するWindowsの標準コントロールは、 ポップメニュー表示中にはホバー表示されませんが… どうしてもホバー表示したいのであれば、 もしかするとタイマーを使えば可能かもしれません。 どうもメニューモーダルループ中でもWM_TIMERメッセージは処理されているようなので。 コンテキストメニューの表示時にタイマーを作動させ(100ms〜300ms間隔くらいかな?)、 ユーザーコントロール上にマウスポインタがあるかヒットテストを行い、 ヒットしていたらイメージを切り替える。 …というのはどうでしょう?(できるかどうか自信はないですが) | ||||
|
投稿日時: 2007-02-13 09:16
おはようございます。 書き込みが、遅くなってすみません。 タイマーでチェックするように考えたいと思います。 1.メニュー表示と同時にタイマースタート 2.タイマーイベントで、状態が変わっていれば再描画処理 3.メニュー非表示でタイマーストップ Tdnr_symさんありがとうございました。 |
1