2011-08-04 4 views
2

私は画面全体で最大化されたフォームを作成しました。完全に透明なパネルのキーを押しながらマウスをクリックすると反応します

フォーム内には、フォーム全体を塗りつぶすようにサイズが設定されています。背景色がRedに設定されています。フォームのTransparencyKeyRedに設定されています。

したがって、Panelは「鍵穴」のようなものです。そのすぐ下にあるデスクトップを見ることができます。

ユーザーがパネルをクリックするか、またはキーボードのキーを押すと、対応したいと思います。

しかし、パネルが完全に透明であるため、クリックするかキーを押すと何も起こりません。パネルを非透明にすると(たとえば、背景色をBlueに設定すると)、クリックに反応します。

パネルがクリックやキー操作に反応するのに最適な方法は何ですか?

システム全体ですべてのマウスイベントをマウスで操作する必要がありますか、それとも簡単な方法がありますか?

答えて

0

ディスコ私はGetAsyncKeyStateを使用して、キー押下とマウスクリックの両方に応答することができません。

[DllImport("user32.dll")] 
public static extern int GetAsyncKeyState(System.Windows.Forms.Keys vKey); 

その後、私は例えば、GetAsyncKeyState(Keys.LButton)GetAsyncKeyState(Keys.Escape)を呼び出すことができます。すべてのキーボードとマウスイベントをフックするよりもずっと簡単です。

0

パネルでテキスト入力が行われないため、キー入力イベントを処理するためにメインフォームを設定できます。

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.form_KeyPress); 

http://screensnapr.com/v/VovWAi.png

あなたパネル上のマウスの位置を取得するためとして、あなたはマウスクリックイベント、私はそれをテストしている

this.panel1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseClick); 

http://screensnapr.com/v/DB3kCQ.png

を使用することができ、そしてそれは上で動作しますフルサイズの透明パネル

+2

これはAeroでのみ動作します。 XPまたはAeroを無効にすると、パネルはマウスのクリックに対して透過的になります。エアロの振る舞いはバグですが、「フィーチャー」になるには不十分です。 –

+0

@ Hans-Passant XPやAeroで動作する技術は知っていますか? – yarone

+0

あなたの質問の最後の文に答えがあります。 –