2011-02-11 16 views
0

.NETでは、非透過フォームをクリックして作成できますか?フォームのすぐ後ろにマウスのクリックをウィンドウに移すためのAPIがあるはずだと思います。どれ?.NETの不透明なクリックスルーフォーム

+0

WinFormsまたはWPF? (また、これは非常に奇妙な要求のように思えますが、ユーザーは通常、不透明なウィンドウがマウスイベントを受け取ることを期待しています) –

+0

フォームが不透明な場合にクリックするものをユーザーが把握する方法を提案しますか? –

答えて

2

フォームのリンク先を作成するには、Windows APIからいくつかの関数をP/Invokeし、フォームのextended window stylesを設定する必要があります。 VB.NETでサンプルコードを表現することを任意に選択しました。それがあなたの好みでないなら、それは簡単にC#に変換されます。

GetWindowLong functionで始まります。これを拡張ウィンドウスタイルの取得に使用します。

Public Const GWL_EXSTYLE As Integer = -20 

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _ 
Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, _ 
            ByVal nIndex As Integer) As Integer 
End Function 

また、追加の拡張ウィンドウスタイルを指定するには、その姉妹機能、SetWindowLongが必要になります。

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _ 
Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, _ 
            ByVal nIndex As Integer, _ 
            ByVal dsNewLong As Integer) As Integer 
End Function 

そして設定する必要があります、拡張ウィンドウスタイルのための定数:

Public Const WS_EX_TRANSPARENT As Integer = &H20 


をそして今、このすべてを使用するには、フォームのOnLoad methodをオーバーライドして、次の行を追加することができます:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) 
    ''# Call the base class implementation 
    MyBase.OnLoad(e) 

    ''# Grab the current extended style information for this form 
    Dim initialStyles As Integer = GetWindowLong(Me.Handle, GWL_EXSTYLE) 

    ''# Add the transparent extended window style 
    Dim newStyles As Integer = initialStyles Or WS_EX_TRANSPARENT 

    ''# Update the form's extended window styles 
    SetWindowLong(Me.Handle, GWL_EXSTYLE, newStyles) 
End Sub 

もちろん、ユーザーがフォーム上の要素とやりとりすることは不可能になることに注意してください。 極端にそれを閉じるのは難しいです。これが本当にあなたがしたいことであるかどうかを慎重に検討してください。