vb高手看看 让一个窗体不是当前活动窗体

来源:百度知道 编辑:UC知道 时间:2024/05/31 13:25:12
不知道要怎么说,一个窗体在最前面,可是当前活动的窗体是它的下一层窗体,鼠标在这个最前面的窗体上的事件(单击,双击,移动等等)这个最前面的窗体都无法获得,而是把这些事件传递给下一层窗体,就像在对下一层的窗体进行鼠标操作一样。对于键盘事件也是一样。
第一次来百度知道,分不多,希望高手看看。
是那种鼠标穿透效果,可是s68651521的答案会让它最小化,我希望她保持不变。

先findwindows查找一下,在获取句柄操作窗体

你的意思就是要实现程序窗体的鼠标穿透效果嘛

给你代码

Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Const WS_EX_TRANSPARENT As Long = &H20&
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Command1_Click()
SetWindowLong Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED Or WS_EX_TRANSPARENT
End Sub

具体的解释是:
'取消鼠标穿透(一般窗体) SetWindowLong Me.hwnd, GWL_EXSTYLE, 0
'取消鼠标穿透(UpdateLayeredWindow画窗体) SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED

你这样有什么意义 ?目的何在?会不会有点多余?