如果捕捉“点击任务栏图标事件"

plmsoft 2006-03-05 05:10:20
注意 不是系统托盘图标

BorderStyle=0 的form 当点击任务栏上的图标 不能最小化。

...全文
285 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2006-03-05
  • 打赏
  • 举报
回复
//如果捕捉“点击任务栏图标事件"

如果就题而论的话,你可以尝试在子类中处理一条MS没有说明的消息(对应常量为&H313)
rainstormmaster 2006-03-05
  • 打赏
  • 举报
回复
http://www.china-askpro.com/msg14/qa48.shtml
faysky2 2006-03-05
  • 打赏
  • 举报
回复
或者用 rainstormmaster(暴风雨 v2.0) 大哥的方法:

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Const SM_CYCAPTION = 4

Private Sub Form_Load()
Dim rgn As Long, capHeight As Long
capHeight = GetSystemMetrics(SM_CYCAPTION) + 3
Me.ScaleMode = 3
rgn = CreateRectRgn(3, capHeight, Me.ScaleWidth, Me.ScaleHeight + capHeight)
SetWindowRgn Me.hWnd, rgn, True
End Sub
faysky2 2006-03-05
  • 打赏
  • 举报
回复
忘了一点,把窗体的BorderStyle属性设置1后,需要把窗体的MaxButton和MinButton属性设置为True,否则最大和最小化菜单就没了
faysky2 2006-03-05
  • 打赏
  • 举报
回复
用 GetWindowLong 函数和SetWindowLong:

添加一个模块,把窗体的BorderStyle属性设置1,然后复制一下代码,就可以实现你所要求的效果了

Public Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOSIZE = &H1

Public Sub ToggleTitleBar(f As Form, ShowTitle As Boolean)
Dim style As Long
style = GetWindowLong(f.hwnd, GWL_STYLE)
If ShowTitle Then
style = style Or WS_CAPTION
Else
style = style And Not WS_CAPTION
End If
SetWindowLong f.hwnd, GWL_STYLE, style
SetWindowPos f.hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOSIZE
End Sub

'在窗体form1的load事件中
Private Sub Form_Load()
ToggleTitleBar Me, False
End Sub
rainstormmaster 2006-03-05
  • 打赏
  • 举报
回复
换一种思路,用setwindowrgn去调窗体的标题栏,就不存在这个问题了

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧