- PR -

ContextMenu表示中のマウスイベント

1
投稿者投稿内容
CSharp
会議室デビュー日: 2005/11/28
投稿数: 15
投稿日時: 2007-02-08 20:49
【環境】
OS:WindowsXPPro
VS:VS.NET2005
言語:C#
AP:Windowsアプリ

以下の機能を持つUserControlを作成しています。
・通常時とマウスオーバー時でイメージを替えて表示する
・左クリックするとContextMenuを表示する

このコントロールでContextMenu表示中にマウスポインタを移動しても
マウスイベントが飛んでこないためイメージが切り替わりません。
ContextMenu表示中にイメージを切り替えるには、どのようなアプローチが
あるのかご意見を下さい。

ちなみにContextMenuではマウスをキャプチャしている様子はありませんでした。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-02-08 21:50
こんばんは。

引用:

CSharpさんの書き込み (2007-02-08 20:49) より:

このコントロールでContextMenu表示中にマウスポインタを移動しても
マウスイベントが飛んでこないためイメージが切り替わりません。
ContextMenu表示中にイメージを切り替えるには、どのようなアプローチが
あるのかご意見を下さい。

ちなみにContextMenuではマウスをキャプチャしている様子はありませんでした。



ポップアップメニュー表示中は、メニューモーダルループに入るため
ウィンドウメッセージが各ウィンドウにディスパッチされていないからでしょう。

対処方法は…
ポップアップメニューを自作する…でしょうか?
CSharp
会議室デビュー日: 2005/11/28
投稿数: 15
投稿日時: 2007-02-09 09:40
回答ありがとうございます。

引用:


ポップアップメニュー表示中は、メニューモーダルループに入るため
ウィンドウメッセージが各ウィンドウにディスパッチされていないからでしょう。




「メニューモーダルループ」ですか…
メニュー自体がモードレスなのでモーダルループに入っているとは思いもしませんでした。

でも自作は避けたいところです。
他の解決策もお待ちしています。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-02-09 10:21
こんにちは。

引用:

CSharpさんの書き込み (2007-02-09 09:40) より:
他の解決策もお待ちしています。



ホバー表示するWindowsの標準コントロールは、
ポップメニュー表示中にはホバー表示されませんが…

どうしてもホバー表示したいのであれば、
もしかするとタイマーを使えば可能かもしれません。
どうもメニューモーダルループ中でもWM_TIMERメッセージは処理されているようなので。

コンテキストメニューの表示時にタイマーを作動させ(100ms〜300ms間隔くらいかな?)、
ユーザーコントロール上にマウスポインタがあるかヒットテストを行い、
ヒットしていたらイメージを切り替える。
…というのはどうでしょう?(できるかどうか自信はないですが)
CSharp
会議室デビュー日: 2005/11/28
投稿数: 15
投稿日時: 2007-02-13 09:16
引用:

Tdnr_Symさんの書き込み (2007-02-09 10:21) より:
コンテキストメニューの表示時にタイマーを作動させ(100ms〜300ms間隔くらいかな?)、
ユーザーコントロール上にマウスポインタがあるかヒットテストを行い、
ヒットしていたらイメージを切り替える。
…というのはどうでしょう?(できるかどうか自信はないですが)




おはようございます。
書き込みが、遅くなってすみません。
タイマーでチェックするように考えたいと思います。

1.メニュー表示と同時にタイマースタート
2.タイマーイベントで、状態が変わっていれば再描画処理
3.メニュー非表示でタイマーストップ

Tdnr_symさんありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)