MDI窗体中的托盘问题
郁闷的小问题,我在MDI主窗体中实现托盘功能,最小化可以放到托盘中。但是只有一个问题,窗体中定义的Me.PopupMenu mnuTray点托盘下的图标右键却出不来(在窗体的dbclick中Me.PopupMenu mnuTray能调出)。但在标准窗体中修改后实现,一点问题也没有。贴出部分代码:
Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Select Case CLng(x)
Case WM_RBUTTONUP '注释:鼠标在图标上右击时弹出菜单
MDIForm1.PopupMenu mnuTray
Case WM_LBUTTONUP '注释:鼠标在图标上左击时窗口若最小化则恢复窗口位置
If MDIForm1.WindowState = vbMinimized Then
MDIForm1.Visible = True
MDIForm1.WindowState = LastState
End If
End Select
End Sub
Private Sub MDIForm_Resize()
Select Case WindowState
Case vbMinimized
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = False
mnuTrayRestore.Enabled = True
Me.Visible = False
Case vbMaximized
mnuTrayMaximize.Enabled = False
mnuTrayMinimize.Enabled = True
mnuTrayRestore.Enabled = True
Case vbNormal
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = True
mnuTrayRestore.Enabled = False
End Select
If WindowState <> vbMinimized Then LastState = WindowState
End Sub
Private Sub MDIForm_Load()
Timer1.Interval = 500 ' 设置计时器时间间隔
Timer1.Enabled = True ' 使计时器可用
' 隐藏图片
For Img_Int = 0 To 4
Icon_Img(Img_Int).Visible = False
Next Img_Int
Img_Int = 0 ' 初始图片索引
If WindowState = vbMinimized Then
LastState = vbNormal
Else
LastState = WindowState
End If
With myData
.cbSize = Len(myData)
.hwnd = Me.hwnd
.uID = 0
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon.Handle '注释:默认为窗口图标
.szTip = "IC智能卡" & vbNullChar
End With
Shell_NotifyIcon NIM_ADD, myData
End Sub
module中的声明:
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_RESTORE = &HF120&
Public LastState As Integer
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const NIF_MESSAGE = &H1 '注释:NOTIFYICONDATA结构中uFlags的控制信息
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200 '注释:当鼠标指针移至图标上
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONUP = &H205
Public Type NOTIFYICONDATA
cbSize As Long '注释:该数据结构的大小
hwnd As Long '注释:处理任务栏中图标的窗口句柄
uID As Long '注释:定义的任务栏中图标的标识
uFlags As Long '注释:任务栏图标功能控制,可以是以下值的组合(一般全包括)
'注释: NIF_MESSAGE表示发送控制消息;
'注释:NIF_ICON表示显示控制栏中的图标;
'注释: NIF_TIP表示任务栏中的图标有动态提示?
uCallbackMessage As Long '注释:任务栏图标通过它与用户程序交换消息,处理该消息的窗口由hWnd决定
hIcon As Long '注释:任务栏中的图标的控制句柄
szTip As String * 64 '注释:图标的提示信息
End Type
请求高手帮助。敬请斑竹,侠客的帮助。