用VB6.0实现将窗体最小化到系统托盘区

合集下载

C#WinForm窗口最小化到系统托盘

C#WinForm窗口最小化到系统托盘

C#WinForm窗⼝最⼩化到系统托盘private void notifyIcon1_Click(object sender, EventArgs e){this.Visible = true;this.WindowState = FormWindowState.Normal;this.notifyIcon1.Visible = false;}主窗体中拖⼊⼀个ContextMenu控件NicontextMenu,点中控件,在上下⽂菜单中添加菜单,notifyIcon1的ContextMenu⾏为中选中NicontextMenu 作为上下⽂菜单。

复制代码代码如下:this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(ponents);this.NicontextMenu = new System.Windows.Forms.ContextMenu();this.menuItem_Hide = new System.Windows.Forms.MenuItem();this.menuItem_Show = new System.Windows.Forms.MenuItem();this.menuItem_Aubot = new System.Windows.Forms.MenuItem();this.menuItem_Exit = new System.Windows.Forms.MenuItem();this.notifyIcon1.ContextMenu = this.NicontextMenu;this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject( "NotifyIcon.Icon ")));this.notifyIcon1.Text = " ";this.notifyIcon1.Visible = true;this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);this.notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);this.NicontextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[]{this.menuItem_Hide,this.menuItem_Show,this.menuItem_Aubot,this.menuItem_Exit});//// menuItem_Hide//this.menuItem_Hide.Index = 0;this.menuItem_Hide.Text = "隐藏 ";this.menuItem_Hide.Click += new System.EventHandler(this.menuItem_Hide_Click);//// menuItem_Show//this.menuItem_Show.Index = 1;this.menuItem_Show.Text = "显⽰ ";this.menuItem_Show.Click += new System.EventHandler(this.menuItem_Show_Click);//// menuItem_Aubot//this.menuItem_Aubot.Index = 2;this.menuItem_Aubot.Text = "关于 ";this.menuItem_Aubot.Click += new System.EventHandler(this.menuItem_Aubot_Click);//// menuItem_Exit//this.menuItem_Exit.Index = 3;this.menuItem_Exit.Text = "退出 ";this.menuItem_Exit.Click += new System.EventHandler(this.menuItem_Exit_Click);protected override void OnClosing(CancelEventArgs e){this.ShowInTaskbar = false;this.WindowState = FormWindowState.Minimized;e.Cancel = true;}protected override void OnClosing(CancelEventArgs e){//this.ShowInTaskbar = false;this.WindowState = FormWindowState.Minimized;e.Cancel = true;}private void CloseCtiServer(){timer.Enabled = false;DJ160API.DisableCard();this.NotifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}private void HideCtiServer(){this.Hide();}private void ShowCtiServer(){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}private void CtiManiForm_Closing(object sender, ponentModel.CancelEventArgs e) {this.CloseCtiServer();}private void menuItem_Show_Click(object sender, System.EventArgs e){this.ShowCtiServer();}private void menuItem_Aubot_Click(object sender, System.EventArgs e){}private void menuItem_Exit_Click(object sender, System.EventArgs e){this.CloseCtiServer();}private void menuItem_Hide_Click(object sender, System.EventArgs e){this.HideCtiServer();}private void CtiManiForm_SizeChanged(object sender, System.EventArgs e){if(this.WindowState == FormWindowState.Minimized){this.HideCtiServer();}}private void notifyIcon1_DoubleClick(object sender,System.EventArgs e){this.ShowCtiServer();}。

应用VB6.0结合WindowsAPI编写多面板应用程序

应用VB6.0结合WindowsAPI编写多面板应用程序

T e eth c一> hD s d 指图像所要粘贴到的 目标 设备场景句柄 一 0 0一> 目标 设备场 景中 目标矩形 左 上角 位置进行描述 . 对 的那个点 用 目标设 备对 象的逻辑坐标表 示一 7 , 3一> l2 欲传输 图像的宽度 和高度 T e ore p tr o )h c >源 设 备 场 景 .包 r源 图 h Suc iue x d c它保存在 i t B
刖 舌
内存中 ,然后粘贴到特定的对象里 =举例说明:
点也不简单, 浯句 1
BkBI t heDes hDC 0 q t 2 SRCCO PY 00

我 们 都 知 道 Vsa B s i l at 做 的 很 多 事 情 u e所
维普资讯
买用第一
智 慧密集
可 花
应 用 V 6 0结合 Widw P B. no s I A
编写多面板应用程序
邱 玉 宝


本 文主要 论 述 了怎样在 Vsa B s . i l ai 60的环 境 下 ,不利 用 D L和 第三 方控件 , u c L
像 主要 是指 图 片框 中的 图像 7 , 0 一> 源 设 备对 象 中 源 矩 形 左 上 角 位 置 进 行 描 述 的 3 20 对
程挫 _ 术的最好的体现 在 V 6的编程 环境下 .要进行这样的 B 编程技 术 ,可 有多种途径 ,其 中 ,利用外 来的 动态链接库 f L ) 已有的第 二方 A te D L和 三 ci X控 件 町以很快的 实现 然而 , v 怎样在没有 D I和 A te L ci X的情况 F 实现 这样的 功能 呢?本 v 来 文就是避 开已有的这样那样 的外来程序组 件 ,而是应用 Wi— n Iw P 中最为常用的 Bth函数的功能来实现多面顿切换 程 ls I o A i B 序 ,这样 既可 以让编 程爱好者 更加灵 活地 控制 自己的程序 , 使程 序更 为美观 ,叉能学习到 Wi o s P 程序设计技巧 ,了 n w I d A 解到 Bth函数 的用法 同时在程序的编写过程 中涉及到 T其 i B

程序最小化到托盘

程序最小化到托盘

VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中(就是为应用程序在桌面右下角添加一个图标,和QQ类似)有位老兄说我乱贴,可能这位老兄已经看得眼花缭乱了,Shell_NotifyIcon 是一个Windows SDK的一个函数,只要你在windows下编程,不管你是BCB、VC、VB,都可以调用它来实现托盘图标,只是调用方法不同罢了。

常常能见到一些优秀的软件在运行后会将其应用程序图标加入到系统托盘中。

如果能将自己编写的应用程序的图标也加入到系统托盘中,将会使你的程序显得很有专业水准。

其实这并不困难,与系统托盘通信的函数只有一个:Shell_NotifyIcon (UINT message, NOTIFYICONDATA &m_nid);首先看一下该函数的两个参数。

第一个参数message可以取以下值:NIM_ADD 向托盘中加入一个图标; NIM_MODIFY 修改托盘中的图标;NIM_DELETE 从托盘中删除一个图标;第二个参数m_nid是NOTIFYICONDATA结构的一个引用。

该结构的原型如下:typedef struct _NOTIFYICONDATA{DWORD cbSize;// 结构的大小,必须在程序中给出HWND hWnd; //是你程序中将要接收托盘消息的窗口句柄UINT uID; // 应用程序中定义的托盘图标ID,此参数用作标识UINT uFlags; //设置属性,低三位有意义,0--7,如下://第一位//#define NIF_MESSAGE 0x1 // uCallbackMessage参数有效//第二位//#define NIF_ICON 0x2 // hIcon参数有效//第三位//#define NIF_TIP 0x4 // szTip参数有效UINT uCallbackMessage; // 自定义的消息ID值,一定不要与以有的消息ID相重。

VB最小化编程

VB最小化编程

要实现窗口最小化必须满足以下条件:1:按下最小化按钮,窗体不可见2:最小化后,最小化窗体的图标必须出现在任务栏的通知区域中3:当双击通知区域中的图标时,窗体又显示出来,同时通知区域中的图标消失.要满足上面的条件:1:首先屏蔽窗体中系统自带的最小化图标,即Form.MinButton=False 2:声明1个API函数:Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_ NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICOND ATA) As Long注意:上面这个API函数在XP中没有别名,将别名去掉后为: Public Declare Function Shell_NotifyIcon Lib "shell32.dll"(ByVal dwMe ssage As Long, lpData As NOTIFYICONDATA) As Long3:声明7个常数:Public Const NIM_ADD = &H0Public Const NIM_DELETE = &H2Public Const NIF_ICON = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_TIP = &H4Public Const WM_MOUSEMOVE = &H200Public Const WM_LBUTTONDBLCLK = &H2034:定义1个NOTIFYICONDATA类型Public Type NOTIFYICONDATAcbSize as LonghWnd as LonguId as LonguFlags as LonguCallBackMessage as LonghIcon as LongszTip as StringEnd Type5:声明一个nid的类型Public nid as NOTIFYICONDATA思路清晰后,开始编写代码1:在窗体中画1个Command,它的Caption属性为:"最小化"2:将窗体Form的MinButton的属性设为:"False"3:在窗体中添加1个模块,模块中的代码为:Public Declare Function Shell_NotifyIcon Lib "shell32.dll"(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongPublic Const NIM_ADD = &H0Public Const NIM_DELETE = &H2Public Const NIF_ICON = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_TIP = &H4Public Const WM_MOUSEMOVE = &H200Public Const WM_LBUTTONDBLCLK = &H203Public Type NOTIFYICONDATAcbSize as LonghWnd as LonguId as LonguFlags as LonguCallBackMessage as LonghIcon as LongszTip as StringEnd TypePublic nid as NOTIFYICONDATA4:编写Command的单击事件:Private Sub Command1_Click()nid.cbSize = Len(nid)nid.uId = vbNullnid.hWnd = Me.hWndnid.uFlags = NIF_TIP Or NIF_MESSAGE Or NIF_ICONnid.uCallBackMessage = WM_MOUSEMOVEnid.hIcon = Me.Iconnid.szTip = "窗体最小化"Shell_NotifyIcon NIM_ADD, nidMe.HideEnd Sub5:编写窗体的MouseMove事件:Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X A s Single, Y As Single)Dim msg As Longmsg = X / 15If msg = WM_LBUTTONDBLCLK ThenMe.ShowShell_NotifyIcon NIM_DELETE, nidEnd IfEnd Sub按F5启动,单击Command,看看通知区域中是不是多了个窗体的图标?双击该图标,窗体又显示出来了!一、Shell_NotifyIcon 函数说明此函数用来向任务栏托盘区域发送消息1、函数格式BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYIC ONDATA lpdata);2、参数说明:dwMessage为输入参数,传递发送的消息,表明要执行的操作。

最小化到托盘

最小化到托盘
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then
cSysTray1.InTray = True
Me.Visible = FalseEnd If
End SLeabharlann b 点击托盘图标后让程序显示出来,如下:
Private Sub cSysTray1_MouseDown(Button As Integer, Id As Long)
Me.WindowState = vbNormal
Me.Visible = True
cSysTray1.InTray = False
Me.SetFocus
End Sub
然后在自己的VB程序中添加改控件(工程-部件-浏览)。
最好把这个ocx放到C:\WINDOWS\system32。
改控件的属性InTray属性用来设置是否显示在托盘中,True为显示在托盘,False为不显示。TrayIcon属性是在托盘中显示的图标式样。TrayTip属性是鼠标移到改控件上面显示的提示文字。如果要使程序最小化时显示到托盘,如下:
单击“最小化”按钮(标题栏的右边)将窗口缩小为任务栏上右边的图标,同时隐藏原窗体。单击或者右键托盘化的图标,可以重现原窗体。
vb中有部分api可以实现将窗体最小化的功能,但是非常繁琐。这里有一个非常简单的办法:可以用微软封装好的控件来实现,不过该控件并不在VB安装目录中,需要找到VB的安装盘(不是安装以后的目录)的COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录,将Systray目录拷到硬盘上面并编译为ocx控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),

最小化到托盘

最小化到托盘

系统最小化到托盘一、托盘简介所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。

二、托盘编程相关函数其实,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。

绘制图标以及确定图标所传送消息的函数只有一个,WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid);这个函数负责向系统传递消息,以添加、修改或删除托盘区的图标。

她的返回值是个布尔类型的。

就是说,如果返回0才成功。

参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。

如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是NIM_MODIFY。

参数pnid就是具体的和程序在托盘区的图标有关系的结构了。

它的定义如下:typedef struct _NOTIFYICONDATA {DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;char szTip[64];} NOTIFYICONDATA, *PNOTIFYICONDATA;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。

一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。

HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。

大多数情况下是this->m_hWnd。

uID : 在工程中定义的图标IDuFlags : 这个成员标志着其他哪些成员的数据是有效的,分别为NIF_ICON, NIF_MESSAGE, NIF_TIP,分别代表着数据有效的成员是hIcon, uCallbackMessage, szTip。

用VB6.0实现将窗体最小化到系统托盘区

用VB6.0实现将窗体最小化到系统托盘区

用VB6.0实现将窗体最小化到系统托盘区使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。

本人力荐第二种小巧有效简单的方法。

方法一(作者:zheng0823)API法经测试部分有效1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas3、在Module1中写下如下代码:Option ExplicitPublic Const MAX_TOOLTIP As Integer = 64Public Const NIF_ICON = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_TIP = &H4Public Const NIM_ADD = &H0Public Const NIM_DELETE = &H2Public Const WM_MOUSEMOVE = &H200Public Const WM_LBUTTONDOWN = &H201Public Const WM_LBUTTONUP = &H202Public Const WM_LBUTTONDBLCLK = &H203Public Const WM_RBUTTONDOWN = &H204Public Const WM_RBUTTONUP = &H205Public Const WM_RBUTTONDBLCLK = &H206Public Const SW_RESTORE = 9Public Const SW_HIDE = 0Public nfIconData As NOTIFYICONDATAPublic Type NOTIFYICONDATAcbSize As LonghWnd As LonguID As LonguFlags As LonguCallbackMessage As LonghIcon As LongszTip As String * MAX_TOOLTIPEnd TypePublic Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As LongPublic Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long'4、在Form1的Load事件中写下如下代码:Private Sub Form_Load()'以下把程序放入System Tray====================================System Tray BeginWith 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 = App.Title + "(版本" & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar.cbSize = Len(nfIconData)End WithCall Shell_NotifyIcon(NIM_ADD, nfIconData)'=============================================================System Tray EndMe.HideEnd Sub'5、在Form1的QueryUnload事件中写入如下代码:Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)Call Shell_NotifyIcon(NIM_DELETE, nfIconData)End Sub'6、在Form1的MouseMove事件中写下如下代码:Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim lMsg As SinglelMsg = X / Screen.TwipsPerPixelXSelect Case lMsgCase WM_LBUTTONUP'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"'单击左键,显示窗体ShowWindow Me.hWnd, SW_RESTORE'下面两句的目的是把窗口显示在窗口最顶层'Me.Show'Me.SetFocus'' Case WM_RBUTTONUP'' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray'' Case WM_MOUSEMOVE'' Case WM_LBUTTONDOWN'' Case WM_LBUTTONDBLCLK'' Case WM_RBUTTONDOWN'' Case WM_RBUTTONDBLCLK'' Case ElseEnd SelectEnd Sub7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。

怎么能让VB 程序最小化时在托盘显示呀急急急!~希望VB高手帮忙!

怎么能让VB 程序最小化时在托盘显示呀急急急!~希望VB高手帮忙!

给你个例子吧建立一个frmmain主窗体Option ExplicitPrivate Sub Form_Load()'初始化imgIcon控件的Picture属性imgIcon.Picture = LoadPicture(App.Path & "\" & "heart.ico") mnuTrayShow.Enabled = False'初始化NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE nid.uCallbackMessage = WM_NOTIFYICONnid.hicon = imgIcon.Picturenid.szTip = "系统托盘中的图标" & Chr(0)'调用Shell_NotifyIcon函数将图标加入到系统托盘中Shell_NotifyIcon NIM_ADD, nidEnd SubPrivate Sub Form_Unload(Cancel As Integer)'设置自定义类型的变量的内容Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = 0'调用Shell_NotifyIcon方法来删除系统托盘中的图标Shell_NotifyIcon NIM_DELETE, nidUnload frmTempEnd SubPrivate Sub mnuTrayExit_Click()Unload MeEnd SubPrivate Sub mnuTrayHide_Click()'隐藏窗体,并相应改变菜单项的状态Me.HidemnuTrayHide.Enabled = FalsemnuTrayShow.Enabled = TrueEnd SubPrivate Sub mnuTrayIcon_Click()'设置dlgOpen公用对话框的属性,以便取得相应的图标文件dlgOpen.Filter = "图标文件(*.ico)|*.ico"dlgOpen.Flags = cdlOFNFileMustExistdlgOpen.ShowOpenIf dlgOpen.FileName = "" Then Exit Sub'根据所取得图标文件,来改变imgIcon文件的属性imgIcon.Picture = LoadPicture(dlgOpen.FileName)'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICONnid.hicon = imgIcon.Picture'调用Shell_NotifyIcon函数来修改系统托盘中的图标Shell_NotifyIcon NIM_MODIFY, nidEnd SubPrivate Sub mnuTrayShow_Click()'显示窗体,并相应改变菜单项的状态Me.ShowmnuTrayHide.Enabled = TruemnuTrayShow.Enabled = FalseEnd SubPrivate Sub mnuTrayTip_Click()Dim str As Stringstr = InputBox("输入系统托盘中的图标的提示信息:", "提示信息") If str = "" Then Exit Sub'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_TIPnid.szTip = str & Chr(0)'调用Shell_NotifyIcon函数来修改系统托盘中的图标的提示Shell_NotifyIcon NIM_MODIFY, nidEnd Sub再建立一个空窗体叫frmTemp再建一个模块,名字随便了Option Explicit'声明Shell_NotifyIcon函数,用于将图标加入到系统托盘中Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean'声明自定义的数据类型NOTIFYICONDATAPublic Type NOTIFYICONDATAcbSize As Longhwnd As LonguId As LonguFlags As LonguCallbackMessage As Longhicon As LongszTip As String * 64End Type'声明常量Public Const NIM_ADD = &H0Public Const NIM_MODIFY = &H1Public Const NIM_DELETE = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_ICON = &H2Public Const NIF_TIP = &H4'定义SetWindowLong,用以改变frmTemp窗体的窗体函数Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long'定义事件的常数代码Public Const WM_LBUTTONDOWN = &H201Public Const WM_RBUTTONDOWN = &H204Public Const WM_USER = &H400'定义自定义的事件WM_NOTIFYICONPublic Const WM_NOTIFYICON = WM_USER + &H100'替换窗口处理函数Public Const GWL_WNDPROC = (-4)'该函数为frmTest的窗体处理函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用VB6.0实现将窗体最小化到系统托盘区
使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。

本人力荐第二种小巧有效简单的方法。

方法一
托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。

这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。

在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。

相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。

下面要使用已被微软封装好的控件:csystray1(名称可自定)。

说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。

为方便使用起见,最好编译到Windows\System目录下。

好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。

vb中添加控件的方法就不用我说了吧?
控件的属性和事件浅析:
该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示;
该控件的TrayIcon属性是在托盘中显示的图标式样;
该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字;
该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。

源代码如下:
'使程序最小化时显示到系统托盘
Private Sub Form_Resize()
If Me.WindowState = 1 Then '如程序为最小化则——
cSysTray1.InTray = True '隐藏到任务栏
Me.Visible = False '让程序界面不可见
End If
End Sub
'点击托盘图标后,让程序窗体显示出来
Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long)
Me.WindowState = 0 '程序回复到Normal状态
Me.Visible = True '从任务栏中清除图标
cSysTray1.InTray = False '令程序界面可见
Me.setfocus
End Sub
方法二1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False
2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas
3、在Module1中写下如下代码:
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
'4、在Form1的Load事件中写下如下代码:
Private Sub Form_Load()
'以下把程序放入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 = App.Title + "(版本" & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar
.cbSize = Len(nfIconData)
End With
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
'=============================================================System Tray End
Me.Hide
End Sub
'5、在Form1的QueryUnload事件中写入如下代码:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End Sub
'6、在Form1的MouseMove事件中写下如下代码:
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_LBUTTONUP
'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"
'单击左键,显示窗体
ShowWindow Me.hWnd, SW_RESTORE
'下面两句的目的是把窗口显示在窗口最顶层
'Me.Show
'Me.SetFocus
'' Case WM_RBUTTONUP
'' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray
'' Case WM_MOUSEMOVE
'' Case WM_LBUTTONDOWN
'' Case WM_LBUTTONDBLCLK
'' Case WM_RBUTTONDOWN
'' Case WM_RBUTTONDBLCLK
'' Case Else
End Select
End Sub
7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。

单击此图标,Form1就自动弹出来了。

----------------------------------------------华丽丽的分割线---------------------------------------------------。

相关文档
最新文档