VB中实现托盘功能

2020-11-10 03:30

说到控件?放心,必要的话可作些改进(如更换图标!这个控件就躺在你的VB安装盘里,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了,然后编译成ocx控件.ocx 结果在添加控件的时候会弹出如下对话框附上部分原文,把Systray 改成Systray:请在Tool文件夹里查找一个名叫Systray的目录;System目录下、添加功能等),将它拷贝到硬盘,用VB打开该目录下的工程,可以随意命名:去哪找呀,大家可能要皱眉头了,最好编译到Windows。添加控件的方法就不用我说了吧再网上搜的添加控件法。好了!不过。为方便使用起见,得处理一下

问题补充:
daitq
daitq ·
0 0

在Form中制作一个菜单,在窗体上点右键-菜单编辑器,标题随便,名称“F00”(不含引号,下同),去掉“可见”前的勾,“下一个”,标题“打开”,名称“F01”,点“右箭头”,“下一个”,标题退出,名称“F02”,点“右箭头”,“确定” 

以下是代码,效果是程序运行时不显示在托盘中图标,点最小化后显示在托盘图标并且不在任务栏中显示窗口,双击图标打开窗口,右键点图标弹出菜单 

'-----------------------窗体中-------------------------- 
Dim WindowTop, WindowLeft 

Function WindowStyle() 
'以下把程序放入System Tray====================================System Tray Begin 
With nfIconData 
.hWnd = Me.hWnd 
.uID = Me.Icon 
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP 
.uCallbackMessage = WM_MOUSEMOVE 
.hIcon = Me.Icon.Handle 
'定义鼠标移动到托盘上时显示的Tip 
.szTip = "已最小化到托盘" & vbNullChar 
.cbSize = Len(nfIconData) 
End With 
Call Shell_NotifyIcon(NIM_ADD, nfIconData) 
'=============================================================System Tray End 
Me.Hide 
End Function 

Private Sub Form_Resize() 
WindowTop = Me.Top 
WindowLeft = Me.Left 
If Me.WindowState = 1 Then 
WindowStyle 
End If 
End Sub 

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Dim lMsg As Single 
lMsg = X / Screen.TwipsPerPixelX 
Select Case lMsg 
Case WM_LBUTTONDBLCLK '双击左键显示窗体,要改成其他的看模块里的定义 
ShowWindow Me.hWnd, SW_RESTORE 
Me.Top = WindowTop 
Me.Left = WindowLeft 
'Call Shell_NotifyIcon(NIM_DELETE, nfIconData) 
Me.SetFocus 
Case WM_RBUTTONUP '在托盘图标上点右键显示菜单 
PopupMenu F00 '菜单名称为F00,做菜单时你可以改成别的,这里也得改成相应的 
End Select 
End Sub 

Private Sub F01_Click() 
ShowWindow Me.hWnd, SW_RESTORE 
Me.Top = WindowTop 
Me.Left = WindowLeft 
Call Shell_NotifyIcon(NIM_DELETE, nfIconData) 
End Sub 

Private Sub F02_Click() 
Call Shell_NotifyIcon(NIM_DELETE, nfIconData) 
End 
End Sub 

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
'退出程序时删除托盘图标 
Call Shell_NotifyIcon(NIM_DELETE, nfIconData) 
End Sub 

'-----------------------模块中-------------------------- 
'在系统托盘显示图标的模块 

Option Explicit 
Public Const MAX_TOOLTIP As Integer = 64 
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 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 SW_RESTORE = 9 
Public Const SW_HIDE = 0 
Public nfIconData As NOTIFYICONDATA 
Public Type 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 
Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long