以下是我的部分代码,win2k下调试通过,(最小化缩入托盘,单击托盘图标恢复窗口),但是在win9x下就不行了, 最小化可以缩入托盘,但单击托盘图标却无法恢复窗口.各位帮忙看看,是不是2000和9x下api有不同呢? Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _ (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean Private Type NOTIFYICONDATA cbSize As Long '------- 大小24+64=88 hWnd As Long '---------句柄 uId As Long '--------标志: 增加0,修改1,删除2 uFlags As Long '-------常数&H1 or &H2 or &H4 ucallbackMessage As Long '-----常数 &H200 (表示响应mouse_move) hIcon As Long '------图标 szTip As String * 64 ' ---提示语 End Type Dim t As NOTIFYICONDATA Private Const NIM_ADD = &H0 Private Const NIM_MODIFY = &H1 Private Const NIM_DELETE = &H2 Private Const WM_MOUSEMOVE = &H200 Private Const NIF_MESSAGE = &H1 Private Const NIF_ICON = &H2 Private Const NIF_TIP = &H4 Private Const WM_NCLBUTTONDOWN = &HA1 Private Sub Form_Resize() If Me.WindowState = vbMinimized Then t.cbSize = Len(t) t.hWnd = Picture1.hWnd t.uId = 1& t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE t.ucallbackMessage = WM_MOUSEMOVE t.hIcon = Picture1.Picture t.szTip = "单击恢复窗口" & Chr$(0) Shell_NotifyIcon NIM_ADD, t Me.Hide App.TaskVisible = False End If End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Me.WindowState <> vbMinimized Then Exit Sub End If If ((Button And vbLeftButton) > 0) Then Me.WindowState = vbNormal Me.Show End If End Sub
不就是不能在NT下工作嘛,给你的程序名后面加个"For win9X/ME"不就得了,呵呵
试一下这样行吗?Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim Msg As Long Msg = (X And &HFF) * &H100 Select Case Msg Case 0 ' 鼠标移动 ' 在此输入你的代码 Case &HF00 ' 鼠标左键被按下 ' 在此输入你的代码 Case &H1E00 ' ' 在此输入你的代码 Case &H2D00 ' 双击鼠标左键 Me.Show Case &H3C00 ' 鼠标右键被按下 Me.PopupMenu mnupopup Case &H4B00 ' 鼠标右键弹起 ' 在此输入你的代码 Case &H5A00 ' 双击鼠标右键 ' 在此输入你的代码 End Select End Sub
最小化可以缩入托盘,但单击托盘图标却无法恢复窗口.各位帮忙看看,是不是2000和9x下api有不同呢?
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Type NOTIFYICONDATA
cbSize As Long '------- 大小24+64=88
hWnd As Long '---------句柄
uId As Long '--------标志: 增加0,修改1,删除2
uFlags As Long '-------常数&H1 or &H2 or &H4
ucallbackMessage As Long '-----常数 &H200 (表示响应mouse_move)
hIcon As Long '------图标
szTip As String * 64 ' ---提示语
End Type
Dim t As NOTIFYICONDATA
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_NCLBUTTONDOWN = &HA1
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then
t.cbSize = Len(t)
t.hWnd = Picture1.hWnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
t.hIcon = Picture1.Picture
t.szTip = "单击恢复窗口" & Chr$(0)
Shell_NotifyIcon NIM_ADD, t
Me.Hide
App.TaskVisible = False
End If
End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Me.WindowState <> vbMinimized Then
Exit Sub
End If
If ((Button And vbLeftButton) > 0) Then
Me.WindowState = vbNormal
Me.Show
End If
End Sub
Dim Msg As Long
Msg = (X And &HFF) * &H100
Select Case Msg Case 0 ' 鼠标移动
' 在此输入你的代码 Case &HF00 ' 鼠标左键被按下
' 在此输入你的代码 Case &H1E00 '
' 在此输入你的代码 Case &H2D00 ' 双击鼠标左键
Me.Show
Case &H3C00 ' 鼠标右键被按下
Me.PopupMenu mnupopup Case &H4B00 ' 鼠标右键弹起
' 在此输入你的代码 Case &H5A00 ' 双击鼠标右键
' 在此输入你的代码 End Select
End Sub
win2k——NT 5.0
win9x——win 4.0