
关于vb托盘的问题
PublicConstDefaultIconIndex=1'图标缺省索引PublicConstWM_LBUTTONDOWN=&H201'按鼠标左键PublicConstW...
Public Const DefaultIconIndex = 1 '图标缺省索引
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键
Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标
Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加、修改、删除)有效
Public Const NIF_TIP = 4 'ToolTip(提示)有效
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
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
'定义类型
'通知栏图标状态
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Function Icon_Add(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Add = Shell_NotifyIcon(NIM_ADD, IconVa)
End With
End Function
Function Icon_Del(iHwnd As Long, lIndex As Long) As Long
Dim IconVa As NOTIFYICONDATA
Dim L As Long
With IconVa
.hwnd = iHwnd
.uID = lIndex
.cbSize = Len(IconVa)
End With
Icon_Del = Shell_NotifyIcon(NIM_DELETE, IconVa)
End Function
'修改通知栏图标(参数说明同Icon_Add)
Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Modify = Shell_NotifyIcon(NIM_MODIFY, IconVa)
End With
End Function
Dim MinFlag As Boolean
Private Sub Form1_Load()
MinFlag = False
End Sub
'判断窗口是否最小化状态,并且是按最小化按纽后第一次发生Resize事件
If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then
MinFlag = True
IcCardMain.Visible = False '隐藏窗口
'将窗口图标加入通知栏
Call Icon_Add(Me.hwnd, Me.Caption, IcCardMain.Icon, 0)
End If
End Sub
我想问Dim MinFlag As Boolean这个有什么用?
IcCardMain.Icon和IcCardMain.Visible这个是什么意思,是不是错了?
为什么要 IsIconic(Me.hwnd) <> 0 And MinFlag = False 满足两个条件?
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim L
L = X \ 15 '点击通知栏图标,用鼠标右键时调出弹出菜单
If L = WM_RBUTTONDOWN Then
Form1.PopupMenu Main '点击通知栏图标,用鼠标左键时,将通知栏图标改为另外的图标
'ElseIf L = WM_LBUTTONDOWN Then Call Icon_Modify(Form1.hwnd, Form1.Caption, LoadPicture("D:\Pic2.ico"), 0)
ElseIf L = WM_LBUTTONDOWN Then Call Icon_Modify(Form1.hwnd, Form1.Caption, Form1.Image1, 0)
End If
End Sub
还有 L = X \ 15这是什么意思? 展开
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键
Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标
Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加、修改、删除)有效
Public Const NIF_TIP = 4 'ToolTip(提示)有效
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
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
'定义类型
'通知栏图标状态
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Function Icon_Add(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Add = Shell_NotifyIcon(NIM_ADD, IconVa)
End With
End Function
Function Icon_Del(iHwnd As Long, lIndex As Long) As Long
Dim IconVa As NOTIFYICONDATA
Dim L As Long
With IconVa
.hwnd = iHwnd
.uID = lIndex
.cbSize = Len(IconVa)
End With
Icon_Del = Shell_NotifyIcon(NIM_DELETE, IconVa)
End Function
'修改通知栏图标(参数说明同Icon_Add)
Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Modify = Shell_NotifyIcon(NIM_MODIFY, IconVa)
End With
End Function
Dim MinFlag As Boolean
Private Sub Form1_Load()
MinFlag = False
End Sub
'判断窗口是否最小化状态,并且是按最小化按纽后第一次发生Resize事件
If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then
MinFlag = True
IcCardMain.Visible = False '隐藏窗口
'将窗口图标加入通知栏
Call Icon_Add(Me.hwnd, Me.Caption, IcCardMain.Icon, 0)
End If
End Sub
我想问Dim MinFlag As Boolean这个有什么用?
IcCardMain.Icon和IcCardMain.Visible这个是什么意思,是不是错了?
为什么要 IsIconic(Me.hwnd) <> 0 And MinFlag = False 满足两个条件?
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim L
L = X \ 15 '点击通知栏图标,用鼠标右键时调出弹出菜单
If L = WM_RBUTTONDOWN Then
Form1.PopupMenu Main '点击通知栏图标,用鼠标左键时,将通知栏图标改为另外的图标
'ElseIf L = WM_LBUTTONDOWN Then Call Icon_Modify(Form1.hwnd, Form1.Caption, LoadPicture("D:\Pic2.ico"), 0)
ElseIf L = WM_LBUTTONDOWN Then Call Icon_Modify(Form1.hwnd, Form1.Caption, Form1.Image1, 0)
End If
End Sub
还有 L = X \ 15这是什么意思? 展开
4个回答
展开全部
那么为什么要 IsIconic(Me.hwnd) <> 0 And MinFlag = False 满足两个条件?
因为要在窗口第一次最小化的时候,加入拖盘图标,> Icon_Add
如果不是第一次最小化,就可以省略这个步骤,因为在第一次最小化的时候已经添加了图标,不用再添加一次了。
那么
IsIconic(Me.hwnd) <> 0 And MinFlag = False 这两个条件是就用来判断窗口最小化的时候是不是为第一次最小化,
在load的时候,MinFlag = False(标识窗口不是最小化状态)
窗口第一次最小化的时候
IsIconic(Me.hwnd) <> 0 而且 MinFlag = False
所以
“If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then ”
这个条件是成立的,所以要调用Icon_Add,添加托盘图标
而且把MinFlag 改成True。
窗口不不不不不不不是第一次最小化的时候
IsIconic(Me.hwnd) <> 0 而且 MinFlag = true
所以
“If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then ”
这个条件是不不不不不成立的,所以不用调用Icon_Add
明白了吗?
还有
IcCardMain.Icon 是窗口的图标
IcCardMain.Visible 是窗口是否可见
问题补充回答
----------------------
X \ 15 是单位的换转,1像素=15缇
x\15 就是 把缇转换成像素
回复: lfm13720
-----------------------
呵呵,因为我经常这样转换单位~没看代码就说了。。。
潜意识````有说错不要见怪
因为要在窗口第一次最小化的时候,加入拖盘图标,> Icon_Add
如果不是第一次最小化,就可以省略这个步骤,因为在第一次最小化的时候已经添加了图标,不用再添加一次了。
那么
IsIconic(Me.hwnd) <> 0 And MinFlag = False 这两个条件是就用来判断窗口最小化的时候是不是为第一次最小化,
在load的时候,MinFlag = False(标识窗口不是最小化状态)
窗口第一次最小化的时候
IsIconic(Me.hwnd) <> 0 而且 MinFlag = False
所以
“If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then ”
这个条件是成立的,所以要调用Icon_Add,添加托盘图标
而且把MinFlag 改成True。
窗口不不不不不不不是第一次最小化的时候
IsIconic(Me.hwnd) <> 0 而且 MinFlag = true
所以
“If IsIconic(Me.hwnd) <> 0 And MinFlag = False Then ”
这个条件是不不不不不成立的,所以不用调用Icon_Add
明白了吗?
还有
IcCardMain.Icon 是窗口的图标
IcCardMain.Visible 是窗口是否可见
问题补充回答
----------------------
X \ 15 是单位的换转,1像素=15缇
x\15 就是 把缇转换成像素
回复: lfm13720
-----------------------
呵呵,因为我经常这样转换单位~没看代码就说了。。。
潜意识````有说错不要见怪

2025-03-04 广告
叉车拖托盘物料垫板在物流运输和仓储管理中发挥着重要作用。广东炜田塑料托盘制品有限公司生产的叉车拖托盘物料垫板,设计巧妙,支持拼接功能。这一特性极大地提升了使用的灵活性,可根据实际载物和空间需求,轻松将多个垫板拼接在一起,确保物料稳固堆放,提...
点击进入详情页
本回答由炜田环保新材料提供
展开全部
lcCardMain 是窗体,
icon是图标,visible是显不显示.
MinFlag 是记录一是不是最小化
如果窗体最小化,但minFlag 为FALSE,就是,你最小化了窗体,但是我没有记下来
那么,我就记一下,minfalg=true,然后在系统栏里加图标,如果minflag为TRUE我就不加了,因为再加.系统栏里又多了个图标.
明白了吗?
icon是图标,visible是显不显示.
MinFlag 是记录一是不是最小化
如果窗体最小化,但minFlag 为FALSE,就是,你最小化了窗体,但是我没有记下来
那么,我就记一下,minfalg=true,然后在系统栏里加图标,如果minflag为TRUE我就不加了,因为再加.系统栏里又多了个图标.
明白了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Dim MinFlag As Boolean'定义一个标志,以判断最小化状态
IcCardMain.Icon是窗体的图标,IcCardMain.Visible是窗体的可见,如果最小化了,那么窗体就要变志不可见,用的就是IcCardMain.Visible。在托盘中显示的图标就是IcCardMain.Icon。
IsIconic(Me.hwnd) <> 0 And MinFlag = False 如果要窗口是否最小化,需要判断两方面,一个最小化标志为假,说明窗体没最小化,可以最小化;一个是窗体句柄存在,说明窗体可见,不是隐藏状态。二者都要满足。
IcCardMain.Icon是窗体的图标,IcCardMain.Visible是窗体的可见,如果最小化了,那么窗体就要变志不可见,用的就是IcCardMain.Visible。在托盘中显示的图标就是IcCardMain.Icon。
IsIconic(Me.hwnd) <> 0 And MinFlag = False 如果要窗口是否最小化,需要判断两方面,一个最小化标志为假,说明窗体没最小化,可以最小化;一个是窗体句柄存在,说明窗体可见,不是隐藏状态。二者都要满足。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
L = X \ 15
整除,就是去掉小数的意思
这个方法我一直用成功过,一直以来我就用SetWindowLong来重设窗口函数,从而得到通知栏消息。
如果 L=X\15 是将缇转换为像素,那么L = WM_RBUTTONDOWN 这个就是“像素等于右键按下”,这是一个多么奇怪的比较啊。
整除,就是去掉小数的意思
这个方法我一直用成功过,一直以来我就用SetWindowLong来重设窗口函数,从而得到通知栏消息。
如果 L=X\15 是将缇转换为像素,那么L = WM_RBUTTONDOWN 这个就是“像素等于右键按下”,这是一个多么奇怪的比较啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询