我想点一下系统托盘中的图标
再把哪个MDI窗体显示出来
怎么做啊?
难道我了
Private Sub MDIForm_Resize()
If MDIForm1.WindowState = vbMinimized Then
With m_IconData
.cbSize = Len(m_IconData)
.hWnd = Me.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE 'Or NIF_TIP 'NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "Tour Ver1.0" & vbNullChar
.dwState = 0
.dwStateMask = 0
.szInfo = "双击图标显示主窗体" & Chr(0)
.szInfoTitle = "最小化信息" & Chr(0)
.dwInfoFlags = NIIF_WARNING
End With
Shell_NotifyIcon NIM_ADD, m_IconData
Me.Hide
End If
End Sub
再把哪个MDI窗体显示出来
怎么做啊?
难道我了
Private Sub MDIForm_Resize()
If MDIForm1.WindowState = vbMinimized Then
With m_IconData
.cbSize = Len(m_IconData)
.hWnd = Me.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE 'Or NIF_TIP 'NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "Tour Ver1.0" & vbNullChar
.dwState = 0
.dwStateMask = 0
.szInfo = "双击图标显示主窗体" & Chr(0)
.szInfoTitle = "最小化信息" & Chr(0)
.dwInfoFlags = NIIF_WARNING
End With
Shell_NotifyIcon NIM_ADD, m_IconData
Me.Hide
End If
End Sub
Hook Me.hWnd
AddIconToTray Me.hWnd, Me.Icon, Me.Icon.Handle, "This is a test tip"回调函数
Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Hooking = True Then
If lParam = WM_RBUTTONUP Then
form1.SysTrayMouseEventHandler
WindowProc = True
Exit Function
End If
If lParam = WM_LBUTTONDBLCLK Then
SetForegroundWindow hw
form1.Show
RemoveIconFromTray
Exit Function
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
End If
End Function--------------------------------------
你去看看这个版面的FAQ吧。
'下面是此功能的实现步骤:
'1.这里我们调用的API函数是:
'"Shell_NotifyIcon",在您的模块中添加如下的函
'数声明和常量声明:
'以下常量告诉系统在托盘中您的图标上发生了什么 操作
'常量声明
Public Const WM_MOUSEMOVE = &H200 '在图标上移动鼠标
Public Const WM_LBUTTONDOWN = &H201 '鼠标左键按下
Public Const WM_LBUTTONUP = &H202 '鼠标左键释放
Public Const WM_LBUTTONDBLCLK = &H203 '双击鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '鼠标右键按下
Public Const WM_RBUTTONUP = &H205 '鼠标右键释放
Public Const WM_RBUTTONDBLCLK = &H206 '双击鼠标右键
Public Const WM_SETHOTKEY = &H32 '响应您定义的热键
'API函数声明
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "" ()
Shell_NotifyIconA " (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long "
'自定义一个调用API Shell_NotifyIcon要用到的类 型"NOTIFYICONDATA"
Public Type NOTIFYICONDATA
cdSize As Long 'NOTIFYICONDATA类型的大小
hwnd As Long '你的应用程序窗体的名柄
uId As Long '应用程序图标资源的ID号
uFlags As Long '使那些参数有效它是以下枚举类型中的
'NIF_MESSAGE、NIF_ICON、NIF_TIP三组的组合
uCallbackMessage As Long '鼠标移动时把此消息发给该图标的窗体
hIcon As Long '图标名柄
szTip As String * 64 '当鼠标在图标上时显示的Tip文本
End Type
'这是一个枚举类型它告诉API Shell_NotifyIcon去做什么操作
Public Enum enm_NIM_Shell
NIM_ADD = &H40 '在“金碟”中加一图标
NIM_MODIFY = &H1 '修改“金碟”中的图标
NIM_DELETE = &H2 '删除“金碟”中的图标
NIF_MESSAGE = &H1 '使类型"NOTIFYICONDATA"中的uCallbackMessage有效
NIF_ICON = &H2 '使类型"NOTIFYICONDATA"中的hIcon有效
NIF_TIP = &H4 '使类型"NOTIFYICONDATA"中的szTip有效
WM_MOUSEMOVE = &H200 '使鼠标移动消息有效
End Enum
'定义一个"NOTIFYICONDATA"类型的变量
Public nidProgramData As NOTIFYICONDATA
'以上是函数及常量声明和自定义的一个类型变量,下面是此API函数的调用方法:
'2. 在窗体上用菜单编辑一个具有如下信息的菜单项:
'主菜单: 无标题、名称 (mainMenu)
'子菜单:标题(API编程)、名称(submnul);
'标题(退出)、名称(submnu2).
'这里只是举个例子,具体的功能你可以根据你的具体需要来编辑此菜单项
'3. 在窗体的Load事件中添加如下代码:
Private Sub Form_Load()
'隐藏窗体
With Me
.Top = -10000
.Left = -10000
.WindowState = vbMinimized
End With
'设置类型NOTIFYICONDATA所具有的特征
With nidProgramData
.cbSize = Len(nidProgramData)
.hwnd = Me.hwnd
.uld = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
'触发鼠标移动消息
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
'“托盘”中放入窗体图标,你可以把窗体的图标换成你所喜欢的图标
.szTip = "VB 的 Win32 API 编程" & vbNullChar
End With
'调用该函数
Shell_NotifyIcon NIM_ADD, nidProgramData
End Sub
'根据不同的鼠标消息做不同的操作
Private Sub Form_MouseMove(Button As Integer, Shift As lnteger, x As Single, Y As Single)
On Error GoTo Form_MouseMove_err:
Dim Result As Long
Dim msg As Long
'X的值依赖与显示模式的设置
If Me.ScaleMode = vbPixels Then
msg = x
Else
msg = x / Screen.TwipsPerPixe1X
End If
Select Case msg
Case WM_LBUTTONUP
'在这里加入鼠标左键释放时你想做的操作
Case WM_LBUTTONDBLCLK
'在这里加入双击鼠标左键时你想做的操作
Case WM_RBUTTONUP
'通常这里弹出你的功能菜单
PopupMenu mainMenu
Case WM_MOUSEISMOVING
'在这里加入鼠标正在移动时你想做的操作
End Select
Exit Sub
Form_MouseMove_err:
'在这里加入你的处理异常错误的代码
End Sub
'4.Run你的程序,您是不是看到了象“金山词霸”一样的功能?相信你此时的感觉一定特别“爽”! API的世界j是丰富多彩的,只要你肯细心地去探索它你一定会获得许多意想不到的好东西。所以笔者觉得定值得每一个具有“好奇”精神的人去探索它。后续的期刊笔者会向读者详细介绍一些更好更“牛”的API调用。
但都是FORM的例子
没有MDIFORM的例子
他们普遍用的都是
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Msg As Long
If Me.ScaleMode = vbPixels Then
Msg = x
Else
Msg = x / Screen.TwipsPerPixelX
End If
Select Case Msg
Case WM_LBUTTONUP
PopupMenu main
End Select
End Sub但MDIFORM没有.ScaleMode
所以我就不清楚怎么做了
你上边的回调函数我看了但还是不知道怎么用
Option ExplicitPrivate Sub MDIForm_Load()
Hook Me.hWnd
End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
Unhook
End Sub模块
Option Explicit
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public nfIconData As NOTIFYICONDATA
Public Const WM_LBUTTONDOWN = &H201
Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) 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 Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_ACTIVATEAPP = &H1C
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const MAX_TOOLTIP As Integer = 64
Public Const GWL_WNDPROC = (-4)
Public Const WM_LBUTTONDBLCLK = &H203Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * MAX_TOOLTIP
End Type
Private FHandle As Long
Private WndProc As Long
Private Hooking As Boolean
Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String)
With nfIconData
.hWnd = MeHwnd
.uID = MeIcon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_RBUTTONUP
.hIcon = MeIconHandle
.szTip = Tip & Chr$(0)
.cbSize = Len(nfIconData)
End With
Shell_NotifyIcon NIM_ADD, nfIconData
End SubPublic Sub RemoveIconFromTray()
Shell_NotifyIcon NIM_DELETE, nfIconData
End SubPublic Sub Hook(Lwnd As Long)
If Hooking = False Then
FHandle = Lwnd
WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
Hooking = True
End If
End SubPublic Sub Unhook()
If Hooking = True Then
SetWindowLong FHandle, GWL_WNDPROC, WndProc
Hooking = False
End If
End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Hooking = True Then
If lParam = WM_LBUTTONDOWN Then
SetForegroundWindow hw
MDIForm1.Show
MDIForm1.WindowState = 0
SetForegroundWindow hw
RemoveIconFromTray
Exit Function
End If
If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
MDIForm1.WindowState = 1
MDIForm1.Hide
AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
End If
End Function
多问你一个问题
.szInfo = "双击图标显示主窗体" & Chr(0)
.szInfoTitle = "最小化信息" & Chr(0)
这两个事件没有了
我怎么能有那样的提示框那?
谢谢