加入图标时,用.uCallbackMessage = WM_MOUSEMOVE,然后: Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case CLng(X / Screen.TwipsPerPixelX) Case WM_LBUTTONDBLCLK Case WM_LBUTTONDOWN Case WM_LBUTTONUP Case WM_RBUTTONDBLCLK Case WM_RBUTTONDOWN Case WM_RBUTTONUP End Select End Sub
thanks 还有那个键盘钩子呢?
还是不行啊,帮我看一下: Private Sub Command1_Click() Dim nid As NOTIFYICONDATA With nid .cbSize = Len(nid) .hIcon = Me.Icon .hwnd = Me.hwnd .szTip = nid.szTip & vbNullChar .uCallbackMessage = WM_LBUTTONDOWN .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP .uID = 1& End With Shell_NotifyIcon NIM_ADD, nid hMenus = CreateMenu() AppendMenu hMenus, MF_STRING, 1000, "Restore" AppendMenu hMenus, MF_SEPARATOR, 0&, 0& AppendMenu hMenus, MF_STRING, 1010, "Exit" gHW = frm.hwnd Set appForm = frm lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc) End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y, 0&, Form1.hwnd, 0& End If Select Case CLng(X / Screen.TwipsPerPixelX) ' Case WM_LBUTTONDBLCLK
Case WM_LBUTTONDOWN TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y, 0&, Form1.hwnd, 0& ' Case WM_LBUTTONUP ' Case WM_RBUTTONDBLCLK ' Case WM_RBUTTONDOWN ' Case WM_RBUTTONUP End SelectEnd Sub
先在窗口上加一个picture1,并给他加一个图标,就是在任务兰上要显示的那个 然后打开代码窗口,把下面的代码复制进去。 Option ExplicitPrivate 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 TypePrivate 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 = &H4Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean Dim t As NOTIFYICONDATA
在form_load()中加 Private Sub Form_Load()
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 = "飘洋[email protected]" & Chr$(0) Shell_NotifyIcon NIM_ADD, t Me.Hide App.TaskVisible = False End Sub
在form_Queryunload中 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) t.cbSize = Len(t) t.hWnd = Picture1.hWnd t.uId = 1& Shell_NotifyIcon NIM_DELETE, t End Sub
Private Sub Menu_Click(Index As Integer) Unload Me End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Hex(X) = "1E3C" Then Me.PopupMenu xx End If End Sub
我要做到的是用createmenu,appmenu做出的菜单弹出啊
Option ExplicitPrivate Declare Function CreateMenu Lib "user32" () As Long Dim hMenus As Long Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long Const MF_STRING = &H0& Const MF_SEPARATOR = &H800& Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Const TPM_RIGHTBUTTON = &H2& 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 Dim nid As NOTIFYICONDATA Private Sub Command1_Click() 'Dim nid As NOTIFYICONDATA With nid .cbSize = Len(nid)
.hIcon = Me.Icon .hwnd = Me.hwnd .szTip = nid.szTip & vbNullChar .uCallbackMessage = WM_MOUSEMOVE .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP .uID = 1& End With App.TaskVisible = False Shell_NotifyIcon NIM_ADD, nid hMenus = CreateMenu() AppendMenu hMenus, MF_STRING, 1000, "Restore" AppendMenu hMenus, MF_SEPARATOR, 0&, 0& AppendMenu hMenus, MF_STRING, 1010, "Exit" Me.Hide End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Select Case CLng(x / Screen.TwipsPerPixelX) Case WM_LBUTTONDOWN TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, x, y, 0&, Form1.hwnd, 0& End SelectEnd Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) nid.cbSize = Len(t) nid.hwnd = Picture1.hwnd nid.uID = 1& Shell_NotifyIcon NIM_DELETE, nid End Sub这是我的代码帮帮忙看看哪里出错
‘form_mouseDwon事件里面的 WM_LBUTTONDOWN常数没有定义。 ’’还有TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, x, y, 0&, Form1.hwnd, 0&里的TPM_NONOTIFY Or TPM_RETURNCMD这两个,
提议: 鼠标事件不该放在Form_MouseDown里面,我觉得应该是 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Hex(X) = "1E3C" Then TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y,_ 0&, Form1.hwnd, 0& End IfEnd Sub
还有啊,我已用createpopupmenu,appmenu了啊
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case CLng(X / Screen.TwipsPerPixelX)
Case WM_LBUTTONDBLCLK
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONDBLCLK
Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
End Select
End Sub
还有那个键盘钩子呢?
Private Sub Command1_Click()
Dim nid As NOTIFYICONDATA With nid
.cbSize = Len(nid)
.hIcon = Me.Icon
.hwnd = Me.hwnd
.szTip = nid.szTip & vbNullChar
.uCallbackMessage = WM_LBUTTONDOWN
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uID = 1&
End With
Shell_NotifyIcon NIM_ADD, nid
hMenus = CreateMenu()
AppendMenu hMenus, MF_STRING, 1000, "Restore"
AppendMenu hMenus, MF_SEPARATOR, 0&, 0&
AppendMenu hMenus, MF_STRING, 1010, "Exit"
gHW = frm.hwnd
Set appForm = frm
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y, 0&, Form1.hwnd, 0&
End If
Select Case CLng(X / Screen.TwipsPerPixelX)
' Case WM_LBUTTONDBLCLK
Case WM_LBUTTONDOWN
TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y, 0&, Form1.hwnd, 0&
' Case WM_LBUTTONUP
' Case WM_RBUTTONDBLCLK
' Case WM_RBUTTONDOWN
' Case WM_RBUTTONUP
End SelectEnd Sub
然后打开代码窗口,把下面的代码复制进去。
Option ExplicitPrivate 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 TypePrivate 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 = &H4Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Dim t As NOTIFYICONDATA
Private Sub Form_Load()
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 = "飘洋[email protected]" & Chr$(0)
Shell_NotifyIcon NIM_ADD, t
Me.Hide
App.TaskVisible = False
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
t.cbSize = Len(t)
t.hWnd = Picture1.hWnd
t.uId = 1&
Shell_NotifyIcon NIM_DELETE, t
End Sub
Unload Me
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Hex(X) = "1E3C" Then
Me.PopupMenu xx
End If
End Sub
Dim hMenus As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Const MF_STRING = &H0&
Const MF_SEPARATOR = &H800&
Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Const TPM_RIGHTBUTTON = &H2&
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
Dim nid As NOTIFYICONDATA
Private Sub Command1_Click()
'Dim nid As NOTIFYICONDATA With nid
.cbSize = Len(nid)
.hIcon = Me.Icon
.hwnd = Me.hwnd
.szTip = nid.szTip & vbNullChar
.uCallbackMessage = WM_MOUSEMOVE
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uID = 1&
End With
App.TaskVisible = False
Shell_NotifyIcon NIM_ADD, nid
hMenus = CreateMenu()
AppendMenu hMenus, MF_STRING, 1000, "Restore"
AppendMenu hMenus, MF_SEPARATOR, 0&, 0&
AppendMenu hMenus, MF_STRING, 1010, "Exit"
Me.Hide
End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Select Case CLng(x / Screen.TwipsPerPixelX)
Case WM_LBUTTONDOWN
TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, x, y, 0&, Form1.hwnd, 0&
End SelectEnd Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
nid.cbSize = Len(t)
nid.hwnd = Picture1.hwnd
nid.uID = 1&
Shell_NotifyIcon NIM_DELETE, nid
End Sub这是我的代码帮帮忙看看哪里出错
提议:
鼠标事件不该放在Form_MouseDown里面,我觉得应该是
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Hex(X) = "1E3C" Then
TrackPopupMenu hMenus, TPM_NONOTIFY Or TPM_RETURNCMD, X, Y,_
0&, Form1.hwnd, 0&
End IfEnd Sub