在.NET中,是否可以创建一个可以单击的非透明表单?我假设应该有某种API将鼠标点击转移到窗体后面的窗口。哪一个?
答案 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
当然,请注意,用户现在无法与表单上的元素进行交互,并且非常难以关闭它。仔细考虑这是否真的是你想要做的。