|
将VB程序加入盘拖 |
|
| 来自:http://basicfan.yeah.net/ | 作者: |
|
1.这里我们调用的API函数是:“Shell_NotifyIcon”,在您的模块中添加如下的函数声明和常量声明: '以下常量告诉系统在托盘中您的图标上发生了什么操作 '常量声明 Public Const WM_MOUSEISMOVING = &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" Alias "Shell_NotifyIconA" (ByVal dwMessage As enm_NIM_Shell, pnid As NOTIFYICONDATA) As Boolean '自定义一个调用API Shell_NotifyIcon 要用到的类型“NOTIFYICONDATA” Public Type NOTIFYICONDATA cbSize 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 = &H0 '在“金碟”中加一图标 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编程)、名称(submnu1); 标题(退出)、名称(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 .uId = 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 Integer, 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.TwipsPerPixelX 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 |
|