MFC中给应用程序添加托盘支持
MFC程序添加通知区域图标

[转载]VC学习:MFC程序添加通知区域图标/s/blog_3f04f1de0100k90x.html给MFC程序添加通知区域图标现在起来越多的程序都有一个通知区域图标(托盘图标),既美观又方便。
但是MFC不像C#一样提供NotifyIcon控件,要实现通知区域图标,就要自己做一个CTrayIcon类或者使用NOTIFYICONDATA结构。
MSDN中关于NOTIFYICONDATA的介绍:/en-us/library/ms910625.aspx我在这里记录一下自己通过NOTIFYICONDATA实现MFC程序中的通知区域图标的过程,既是分享,也方便以后自己查阅。
1. 在CMainFrame类(或者是CXxxDlg类)中添加一个NOTIFYICONDATA的结构体变量:NOTIFYICONDATA m_ntIcon;并在CMainFrame的OnCreate函数中(或者是OnInitDialog)设置该变量: m_ntIcon.cbSize = sizeof(NOTIFYICONDATA); //该结构体变量的大小m_ntIcon.hIcon = AfxGetApp()->LoadIconA(IDR_MAINFRAME); //图标,通过资源ID得到m_ntIcon.hWnd = this->m_hWnd; //接收托盘图标通知消息的窗口句柄 char atip[128] = "a notifyicon"; //鼠标设上面时显示的提示strcpy_s(m_ntIcon.szTip, 128, atip);m_ntIcon.uCallbackMessage = MY_WM_NOTIFYICON;//应用程序定义的消息ID号m_ntIcon.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;//图标的属性:设置成员uCallbackMessage、hIcon、szTip有效::Shell_NotifyIconA(NIM_ADD, &m_ntIcon); //在系统通知区域增加这个图标2. 为这个图标添加消息处理(1)定义回调消息的ID#define MY_WM_NOTIFYICON (WM_USER+1001)(2)添加消息映射BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//OnNotifyIcon 就是消息处理函数的名称ON_MESSAGE(MY_WM_NOTIFYICON, &CMainFrame::OnNotifyIcon) END_MESSAGE_MAP()(3)在CMainFrame类(或者是CXxxDlg类)中添加该图标的消息处理函数.h文件中:public:afx_msg LRESULT OnNotifyIcon(WPARAM, LPARAM);.cpp文件中:LRESULT CMainFrame::OnNotifyIcon(WPARAM wparam,LPARAM lparam){if(lparam == WM_LBUTTONDOWN){//这里添加对鼠标左键点击的处理,具体处理见(4)}else if(lparam == WM_RBUTTONDOWN){//这里添加对鼠标右键点击的处理,具体处理见(5)}return 0;}(4)对鼠标左键点击的处理:我一般的处理是如果窗口是正常显示的,点一下将窗口最小化到系统托盘;如果窗口是最小化的,点一下则将其恢复到正常显示。
C#编写的winform程序的托盘功能

C#编写的winform程序的托盘功能基本上⼤部分的桌⾯程序都有托盘功能,⽐如说QQ:当你单机QQ程序窗体的最⼩化按钮时,窗体会消失,并且单击电脑右下⾓的QQ图标时,QQ的窗体重新显现……在这⾥介绍下我们⾃⼰编写的winform程序怎么实现托盘功能。
在System.Windows.Forms命名空间下的封闭类 NotifyIcon可以帮我们轻松实现托盘功能。
(程序集 System.Windows.Forms.dll)在窗体的加载事件的处理⽅法中我们添加⼀下代码:NotifyIcon MyNotifyIcon = new NotifyIcon();//实例化MyNotifyIcon.Visible = true;//可见性MyNotifyIcon.Text = "我的托盘程序";//⿏标放在托盘时显⽰的⽂字MyNotifyIcon.ShowBalloonTip(1000);//托盘⽓泡的显现时间MyNotifyIcon.BalloonTipText = "我的托盘程序";//⽓泡显⽰的⽂字MyNotifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath);//托盘的外观(系统)//⾃定义托盘外观//Icon i = new Icon("FileName");//MyNotifyIcon.Icon = i;MyNotifyIcon.MouseDoubleClick += MyNotifyIcon_MouseDoubleClick;//托盘的⿏标窗机时间注册⽅法然后我们编写托盘双击的时候执⾏的⽅法void MyNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e){this.Show(); // 窗体显现this.WindowState = FormWindowState.Normal; //窗体回复正常⼤⼩}然后在给窗体的⼤⼩改变事件注册⼀个⽅法this.Resize += Form1_Resize;Form1_Resize()⽅法内容://单机窗体最⼩化时窗体隐藏void Form1_Resize(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.Hide();}}以上内容简单⽅便的实现了Winform的托盘功能。
vc实现系统托盘图标

vc实现系统托盘图标Windows中,任务栏的右边(托盘)常驻有几个图标,如输入法切换图标、音量控制图标等系统图标,而一些在后台执行实时监控或其他任务的软件如金山词霸、瑞星杀毒软件等也只是在托盘上放一个小小的图标,几乎不占用本来就拥挤不堪的桌面,而且必要时我们还可以通过用鼠标点击图标对其进行菜单操作或激活其主窗口。
如果在我们编制的一些类似的在后台工作的实时监控软件里加入上述功能,无疑会使程序显得很有专业水准。
虽然有不少介绍系统托盘方面编程的文章,但大多是讲述如何在SDK下用Windows API编写的,这样做显然是非常烦琐的,本文以一个SDI(单文档界面)程序为例,讲述了在MFC框架程序中此类程序的实现过程。
[喝小酒的网摘]/a/1117.htm二、程序的设计思路在编制此类程序时,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使其运行时的主窗口不可见。
同时,又要让用户知道该程序正在运行,并且能达到与用户进行交互的目的。
将一个图标显示在任务栏右端系统托盘区中并响应用户的鼠标动作是当前非常流行的方法。
要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,需要分别设置主边框窗口的风格和扩展风格;另外,利用系统函数Shell_NotifyIcon可以将一个图标显示在任务栏的通告区中。
剩下的任务就是如何通过这个图标来响应用户的操作,可以象其他软件如WinAmp 一样通过弹出式菜单来完成同用户的交互。
三、程序的具体实现(一)主界面的隐藏前面已经提过,要求程序运行开始时主窗口不可见,同时也不出现在任务栏中,在SDK下是通过修改入口函数WinMain中的API函数 CreatWindow的参数来实现的,在MFC下已经对其进行了封装,使我们无法直接对WinMain函数内部进行访问与修改,不过可以通过MFC提供的另外一个接口--在主框架类的预创建窗口函数中设定主框架窗口的风格和扩展风格来实现之:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;cs.style=WS_POPUP;cs.dwExStyle |=WS_EX_TOOLWINDOW;return TRUE;}其中,CREATESTRUCT结构中的style成员变量设定了主框架窗口的风格,在此设定为WS_POPUP;而dwExStyle成员变量则对主框架窗口的扩展风格做了描述,只需在原有基础上为其再增添一种WS_EX_TOOLWINDOW扩展属性即可使其不会出现在任务条上。
MFC控件使用详细教程

MFC控件使用详细教程MFC(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。
它提供了许多方便易用的控件,可以快速创建用户界面。
本教程将详细介绍如何使用MFC控件来创建Windows应用程序。
第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。
在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。
在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。
第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。
例如,当用户点击按钮时,可以执行一些特定的操作。
要实现这个功能,需要添加控件消息处理程序。
可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。
在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。
在消息处理函数中,可以编写代码来实现特定的功能。
第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。
例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。
可以使用类似的方式来处理其他控件的事件。
例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。
第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。
在编译过程中,会生成可执行文件和相关的依赖文件。
mfc使用手册

mfc使用手册MFC(Microsoft Foundation Class Library)是微软提供的一个类库,用于简化Windows应用程序的开发过程。
以下是MFC使用手册的简要介绍:1. 简介:MFC是一个基于C++的类库,它提供了许多用于构建Windows应用程序的类和函数。
通过使用MFC,开发人员可以快速地构建具有一致外观和感觉的应用程序,并利用Windows平台提供的各种功能。
2. 安装和配置:在开始使用MFC之前,您需要安装Microsoft Visual Studio并确保安装了MFC开发工作负载。
安装完成后,您需要创建一个新的MFC项目或打开一个现有的MFC项目。
3. 创建MFC应用程序:要创建一个新的MFC应用程序,您需要使用Microsoft Visual Studio的向导。
选择“File”菜单中的“New”选项,然后选择“Project”。
在弹出的对话框中,选择“MFC Application”并按照向导的提示完成应用程序的创建过程。
4. MFC类库:MFC提供了许多用于构建应用程序的类和函数。
以下是一些常用的MFC类:CWinApp:应用程序对象类,用于管理应用程序级别的操作,例如初始化应用程序和退出应用程序。
CWnd:窗口类,用于管理窗口的各种操作,例如创建窗口、处理消息和绘制窗口。
CDocument:文档类,用于管理应用程序中的文档数据。
CView:视图类,用于管理应用程序中的视图,例如显示文档数据和与用户交互。
5. MFC消息处理:MFC使用消息传递机制来处理用户与应用程序的交互。
每个窗口和控件都处理一组预定义的消息,例如鼠标点击、键盘输入和窗口大小改变等。
通过覆盖类中的虚函数,您可以定义应用程序如何响应这些消息。
6. MFC对话框和控件:MFC提供了许多内置的对话框和控件,例如按钮、文本框和列表框等。
您可以使用对话框编辑器来创建对话框,并将控件拖放到对话框中。
MFC之托盘

在VC++中,想实现最小化MFC程序的时候,最小化到系统托盘,需要调用NOTIFYICONDATA类下面我们就来讲解一下如何简单实现一个系统托盘我们以对话框程序为列第一步:在Dlg类中//定义一个NOTIFYICONDATA类的成员变量,用来设置托盘NOTIFYICONDATA NotifyIcon;第二步:声明一个消息响应函数afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam); 上面那条代码也放在Dlg的头文件中第三步:定义一个自定义消息#define WM_NC WM_USER+1上面那条代码也在Dlg的头文件中声明注册消息ON_MESSAGE(WM_NC,OnNotifyIcon)上面那条代码在Dlg类中第四步:在Dlg头文件中添加一个函数用来响应点击最小化按钮void changeMini();并在Dlg类中实现这个函数//响应最小化消息void CChangeScreenDlg::changeMini(){ShowWindow(SW_HIDE);NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);NotifyIcon.hWnd=m_hWnd;lstrcpy(NotifyIcon.szTip,"MediaCraft EMMG");NotifyIcon.uCallbackMessage=WM_NC;NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;Shell_NotifyIcon(NIM_ADD,&NotifyIcon);}第五步:截获最小化事件在Dlg类中找到OnSysCommand函数修改代码如下if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}//拦截最小化事件if(nID==SC_MINIMIZE){//ToTray();//用我们自己的消息响应最小化事件changeMini();}else{CDialog::OnSysCommand(nID, lParam);}第六步:响应托盘的鼠标事件也是实现我们第二部声明的消息响应函数void CChangeScreenDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam){if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN)){ModifyStyleEx(0,WS_EX_TOPMOST);ShowWindow(SW_SHOW);}}最后一步:在类的析构函数中记得销毁托盘图标对象Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);傻朋提示:以上NOTIFYICONDATA类的一些具体参数,请参阅MSDN一、NOTIFYICONDATA结构NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。
MFC对话框系统托盘详细步骤(精)
MFC 中将窗口最小化至系统托盘1. 在对话框类中声明 NOTIFYICONDATA 变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2. 在 resource.h 文件中自定义消息#define WM_SHOWTASK 10013. 在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam; ...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog...ON_MESSAGE(WM_SHOWTASK,onShowTask...END_MESSAGE_MAP(5. 定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam { // wParam接收的是图标的 ID ,而 lParam 接收的是鼠标的行为if( wParam != IDR_MAINFRAMEreturn 1;switch(lParam{case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个 " 关闭 " { LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint; // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(; // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭 "; // 增加菜单项 " 关闭 " ,点击则发送消息 WM_DESTROY给主窗口(已隐藏 ,将程序结束。
利用Visual C++实现系统托盘程序
利用Visual C++实现系统托盘程序这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。
同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。
本实例就介绍Visual C++开发这类程序的设计方法,该程序编译运行后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里;当鼠标光标移到托盘图标上时,在图标附近会显示提示信息;单击右键时弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令,另外,该程序还可以动态的改变托盘的图标。
参照这个例子,相信读者能轻松自如地在自己的程序中应用系统托盘。
一、实现方法为了实现拖盘程序,首先要使程序的主窗口不可见,这点实现起来十分容易,只要调用ShowWindow(SW_HIDE)就可以了,本实例采用的就是这种方法,还有一种思路是通过分别设置主边框窗口的风格和扩展风格来隐藏主框架:在任务条上显示图标是利用系统API函数Shell_NotifyIcon()来将一个图标显示在任务栏的通告区中。
该函数的原型为:该函数的第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:NIM_ADD:添加一个图标到任务栏。
NIM_MODIFY:修改状态栏区域的图标。
NIM_DELETE:删除状态栏区域的图标。
NIM_SETFOCUS:将焦点返回到任务栏通知区域。
当完成用户界面操作时,任务栏图标必须用此消息。
例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
托盘显示应用程序
C# winForm程序开机启动和托盘显示这段时间一直在学习C#,看了书然后又在网上看了N多大神些的blog,然后自己学着做了一个像QQ托盘图标那样的小功能的Demo:(1)、在窗口上点击关闭按钮或者最小化时将托盘显示;(2)、双击托盘图标显示窗口;(3)、右键点击托盘图标提供三个菜单选项,“退出”、“隐藏”、“显示”;(4)、程序可以设置开机启动,隐藏任务栏显示。
就这四个小功能。
1、建一个WinForm程序—TestIconForm,将其属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示;将MaximizeBox属性设置为false,屏蔽掉最大化按钮;把StartPosition属性改为CerternScreen,这样程序运行后,窗口将会居中显示。
2、在工具栏中的公共控件里,拖入NotifyIcon控件—testNotifyIcon,这个是程序运行任务栏右侧通知区域图标显示控件。
3、在工具栏中的菜单和工具栏里,拖入ContextMenuStrip—testContextMenuStrip,这个控件是右击时关联菜单。
4、右键testNotifyIcon选择属性,将其属性ContextMenuStrip改加为testContextMenuStrip,这个时候1和2两个步骤的两个控件就关联了,用于完成上面(3)功能。
5、右键testContextMenuStrip选择属性,进入Items,然后点击“添加”,这里添加三个菜单选项:exitMenuItem、hideMenuItem、showMenuItem,同时分别将其Text属性改为:退出、隐藏和显示。
准备工作就这些,下面是大致代码:1)、双击TestIconForm,即添加Load事件然后代码private void Form1_Load(object sender, EventArgs e){testNotifyIcon.Icon = new Icon("e:\\MyPicture\\testIcon.ico");//取得程序路径string startup = Application.ExecutablePath;//class Micosoft.Win32.RegistryKey. 表示Window注册表中项级节点,此类是注册表装RegistryKey rKey = Registry.LocalMachine;RegistryKey autoRun =rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");try{autoRun.SetValue("BookServer", startup);rKey.Close();}catch (Exception exp){MessageBox.Show(exp.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);}}添加Form_Closing,SizeChanged事件代码private void Form1_FormClosing(object sender, FormClosingEventArgs e) //关闭按钮事件{e.Cancel = true;this.Hide();}private void Form1_SizeChanged(object sender, EventArgs e) //最小化事件按钮{this.Hide();}2)、给testNotifyIcon添加MouseDoubleClick事件代码private void testNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) // 左键双击,显示{if (e.Button == MouseButtons.Left){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}}3)、进入TestIconForm单击testContextMenuStrip,然后可以看到“退出”、“隐藏”、“显示”,分别双击,添加相应的事件代码private void exitMenuItem_Click(object sender, EventArgs e){if (MessageBox.Show("你确定要退出终端服务程序吗?", "确认", MessageBoxButtons.OKCancel,MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){testNotifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}}private void showMenuItem_Click(object sender, EventArgs e) {this.Hide();}private void hideMenuItem_Click(object sender, EventArgs e) {this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}。
MFC基于Dialog的托盘程序(Visual C++ 2013)
MFC 基于 DIALOG 的托盘程序......................................................................................................................................1
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip);
在执行文件 TrayDialog.cpp 中添加函数定义
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip) {
一、托盘是什么
所谓的“托盘”,在 Windows 系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部 分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
二、NOTIFYICODDATA 结构和 Shell_NotifyIcon 函数
1、 NOTIFYICONDATA 结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提 示消息和图标对应的窗口等内容。其定义为:
#define WM_TRAY_NOTIFICATION WM_USER+1
打开类向导,选择消息选项卡,打开添加自定义消息对话框,添加自定义消息;
Figure 1 添加自定义消息 这时头文件 TrayDialogDlg.h 中会自动添加声明
afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC中给应用程序添加托盘支持收藏
是从网上找的,经过亲身实践,并且结合一些小修改,把这个过程整理出来(开发环境是vs2005):
1:首先在Dlg.h中添加函数
view plainc opy to clipboardprint?
1.// 响应托盘图标事件
2. afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM IParam);
2:在Dlg.h中添加成员变量
view plainc opy to clipboardprint?
1.// 进行托盘图标显示支持的类结构
2. NOTIFYICONDATA NotifyIcon;
3:在Dlg.cpp中添加(这句话要添加在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间)
view plainc opy to clipboardprint?
1.ON_MESSAGE(WM_NC, OnNotifyIcon)
view plainc opy to clipboardprint?
1.// 添加托盘显示支持
2. NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);
3. NotifyIcon.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
4. NotifyIcon.hWnd = m_hWnd;
5. lstrcpy(NotifyIcon.szTip, TEXT("托盘显示"));
6. NotifyIcon.uCallbackMessage = WM_NC;
7. NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
8. Shell_NotifyIcon(NIM_ADD, &NotifyIcon);
5:在Dlg.cpp中添加代码
view plainc opy to clipboardprint?
1.// 响应托盘图标事件
2.LRESULT CMFC_4Dlg::OnNotifyIcon(WPARAM wParam, LPARAM IParam)
3.{
4.if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))
5. {
6. ModifyStyleEx(0, WS_EX_TOPMOST);
7. ShowWindow(SW_SHOW);
8. }
9.return NULL;
10.}
1.else if ((nID & 0xFFF0) == SC_MINIMIZE)
2. {
3.// 点击最小化按钮的时候进行事件处理
4. ShowWindow(SW_HIDE);
5. }
1.Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);
意思是让托盘图标也消失,而不是鼠标放上去才消失的。