MFC基于Dialog的窗口程序启动时最小化到托盘

合集下载

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();}。

程序最小化到托盘

程序最小化到托盘

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相重。

MFC实现对话框的最大最小化【详细】

MFC实现对话框的最大最小化【详细】

MFC实现对话框的最大最小化【详细】实现MFC对话框的最大最小化如何在MFC工程中,为对话框添加最大化,最小化图标:在绘制对话框的面板中,右击对话框,点击属性,勾选相应的就可以。

集体控件操作:第一步、在对话框类中(CDemoDlg.h文件)定义如下变量和函数void ReSize();POINT old;afx_msg void OnSize(UINT nType, int cx, int cy);PS:在CStuDemoDlg.cpp中BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)后面添加ON_WM_SIZE(),否则不会当点击最大化图标时,不会调用OnSize()函数。

第二步、在OnInitDialog()中计算出原始对话框的大小CRect rect;GetClientRect(&rect); //取客户区大小old.x=rect.right-rect.left;old.y=rect.bottom-rect.top;第三步、添加 WM_SIZE消息void CDemoDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif (nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED){ReSize();}}第四步、刷新控件函数void CDemoDlg::ReSize(){float fsp[2];POINT Newp; //获取现在对话框的大小CRect recta;GetClientRect(&recta); //取客户区大小Newp.x=recta.right-recta.left;Newp.y=recta.bottom-recta.top;fsp[0]=(float)Newp.x/old.x;fsp[1]=(float)Newp.y/old.y;CRect Rect;int woc;CPoint OldTLPoint,TLPoint; //左上角CPoint OldBRPoint,BRPoint; //右下角HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件while(hwndChild){woc=::GetDlgCtrlID(hwndChild);//取得IDGetDlgItem(woc)->GetWindowRect(Rect);ScreenToClient(Rect);OldTLPoint = Rect.TopLeft();TLPoint.x = long(OldTLPoint.x*fsp[0]);TLPoint.y = long(OldTLPoint.y*fsp[1]);OldBRPoint = Rect.BottomRight();BRPoint.x = long(OldBRPoint.x *fsp[0]);BRPoint.y = long(OldBRPoint.y *fsp[1]);Rect.SetRect(TLPoint,BRPoint);GetDlgItem(woc)->MoveWindow(Rect,TRUE);hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);}old=Newp;}很重要的一点:确保每个控件的ID都不一样,并在Resource.h 中已经宏定义了,要不要不会改变。

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能1、了解NotifyIcon控件NotifyIcon是一个比较特殊的组件,其特殊之处是既可以把它归类到控件中,也可以把它归类到组件中。

这是因为将其拖放到设计窗体后,我们并不能马上看到它的界面(像组件),而是在运行时才能看到它(像控件)。

通知区域中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。

这些进程不会具有自己的用户界面。

NotifyIcon类提供了编写此功能的方法。

Icon属性定义显示在通知区域中的图标。

图标的弹出菜单由ContextMenu 属性确定。

Text 属性分配工具提示文本。

要在通知区域中显示图标,必须将Visible属性设置为true。

2、拖放一个NotifyIcon控件主要设置的是该控件的Icon属性,Visible属性设置为False。

3、编写窗体的SizeChanged事件if (this.WindowState == FormWindowState.Minimized) //判断是否最小化{this.ShowInTaskbar = false; //不显示在系统任务栏binzhounotifyIcon.Visible = true; //托盘图标可见,其中binzhounotifyIcon为上述notifyicon控件的ID}4、编写NotifyIcon控件的DoubleClick事件该事件完成的是当双击系统托盘的缩略图时还原系统if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true; //显示在系统任务栏this.WindowState = FormWindowState.Normal; //还原窗体binzhounotifyIcon.Visible = false; //托盘图标隐藏}至此简单的系统托盘功能就实现了。

最小化到托盘

最小化到托盘
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控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),

Qt之程序最小化托盘显示及操作

Qt之程序最小化托盘显示及操作

Qt之程序最⼩化托盘显⽰及操作展开1.功能说明对于GUI程序,如果想要实现当最⼩化时,程序从任务栏消失,在系统托盘显⽰⼀个图标,表⽰此程序,并能在托盘内通过双击或者菜单使程序界⾯恢复。

2.使⽤的类主要使⽤的此类:QSystemTrayIcon。

其中QSystemTrayIcon是主要操作系统托盘的操作类,通过此类,可以在托盘显⽰指定程序的图标,响应⽤户⿏标的单击,双击,或wheel操作(好像只对X11系统有⽤),显⽰指定消息,显⽰菜单等。

此类中有两个枚举类型,分别如下:enum QSystemTrayIcon::ActivationReason 表述托盘上图标的触发缘由常量值描述QSystemTrayIcon::Unknown 0 未知原因QSystemTrayIcon::Context 1 请求系统托盘的上下⽂菜单QSystemTrayIcon::DoubleClick 2 ⿏标双击QSystemTrayIcon::Trigger 3 ⿏标单击QSystemTrayIcon::MiddleClick 4 ⿏标中间按键enum QSystemTrayIcon::MessageIcon 当显⽰⽓球消息时显⽰的图⽚常量值描述QSystemTrayIcon::NoIcon 0 不显⽰图标QSystemTrayIcon::Information 1 显⽰信息图标QSystemTrayIcon::Warning 2 显⽰告警图标QSystemTrayIcon::Critical 3 显⽰致命图标3.QSystemTrayIcon常⽤函数void setIcon(const QIcon& icon)设置系统托盘的图标void setToolTip(const QString &tip)设置⿏标放到图标上的提⽰⽂字void setContextMenu(QMenu* menu);设置当点击图标弹出的菜单void show()显⽰系统托盘图标4.代码1.实现程序托盘显⽰a)新建⼀个QWidget程序,在界⾯上放⼊⼀个QPushButton,text改为“最⼩化”,如下图:b)给⼯程加⼊Qt Resource资源⽂件,添加⼀个在托盘显⽰的icon图⽚,如图:c)给a中的QPushButton,建⽴槽函数,在槽函数内实现程序最⼩化托盘显⽰void MainWindow::on_pushButton_clicked(){//隐藏程序主窗⼝this->hide();//新建QSystemTrayIcon对象mSysTrayIcon = new QSystemTrayIcon(this);//新建托盘要显⽰的iconQIcon icon = QIcon("../IMClient/Resources/GG64.png");//将icon设到QSystemTrayIcon对象中mSysTrayIcon->setIcon(icon);//当⿏标移动到托盘上的图标时,会显⽰此处设置的内容mSysTrayIcon->setToolTip(QObject::trUtf8("测试系统托盘图标"));//在系统托盘显⽰此对象mSysTrayIcon->show();}运⾏程序,点击按钮最⼩化,可以在系统托盘看到此图标,⿏标移到上⾯,可以见看见代码中所设的”测试系统托盘图标”⽂本,如图:2.实现托盘图标操作最⼩化后显⽰在系统托盘内,此时除了在任务管理器中结束此程序,⽆法再做其他操作,⽽我们还想实现双击图标显⽰主界⾯,单击图标弹出菜单等实现其他操作,此时,就需要使⽤QSystemTrayIcon::ActivationReason属性了。

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘一、托盘是什么所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

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

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。

其定义为:typedef struct _NOTIFYICONDATA {DWORD cbSize;//以字节为单位的这个结构的大小HWND hWnd;//接收托盘图标通知消息的窗口句柄UINT uID;//应用程序定义的该图标的ID号UINT uFlags;//设置该图标的属性UINT uCallbackMessage;//应用程序定义的消息ID号,此消息传递给hWndHICON hIcon; //图标的句柄char szTip[64]; //鼠标停留在图标上显示的提示信息} NOTIFYICONDATA, PNOTIFYICONDATA;该结构中,成员uFlags可以是下列的组合或其中之一:NIF_ICON:设置成员hIcon有效NIF_MESSAGE:设置成员uCallbackMessage有效NIF_TIP:设置成员szTip有效2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。

其原型为:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:NIM_ADD:增加图标NIM_DELETE:删除图标NIM_MODIFY:修改图标三、如何实现1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+13、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

怎么能让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)。

MFC基于Dialog的窗口程序启动时最小化到托盘
一、托盘是什么
所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

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

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数
1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对
应的窗口等内容。

其定义为:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
//以字节为单位的这个结构的大小
HWND hWnd;
//接收托盘图标通知消息的窗口句柄
UINT uID;
//应用程序定义的该图标的ID号
UINT uFlags;
//设置该图标的属性
UINT uCallbackMessage;
//应用程序定义的消息ID号,此消息传递给hWnd
HICON hIcon; //图标的句柄
char szTip[64]; //鼠标停留在图标上显示的提示信息
} NOTIFYICONDATA, PNOTIFYICONDATA;
该结构中,成员uFlags可以是下列的组合或其中之一:
NIF_ICON:设置成员hIcon有效
NIF_MESSAGE:设置成员uCallbackMessage有效
NIF_TIP:设置成员szTip有效
2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。

其原型为:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);
Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:
NIM_ADD:增加图标
NIM_DELETE:删除图标
NIM_MODIFY:修改图标
三、如何实现
1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;
2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+1
3、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

//---------------------------托盘显示---------------------------------//
m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
m_nid.hWnd = this->m_hWnd;
m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称
m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_nid.szTip, "服务器程序"); // 信息提示条为"服务器程序"
Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标
4、在CYourDlg.h文件中声明消息函数原型
LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);
5、在CYourDlg.cpp文件中进行消息映射
在BEGIN_MESSAGE_MAP(CYourDlg, CDialog)和END_MESSAGE_MAP中间加入以下代码:
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
6、在CYourDlg.cpp文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

LRESULT CYourDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
if(wParam != IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP: // 右键起来时弹出菜单
{
LPPOINT lpoint = new tagPOINT;
::GetCursorPos(lpoint); // 得到鼠标位置
CMenu menu;
menu.CreatePopupMenu(); // 声明一个弹出式菜单
menu.AppendMenu(MF_STRING, WM_DESTROY, "关闭");
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
HMENU hmenu = menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK: // 双击左键的处理
{
this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口
}
break;
}
return 0;
}
7、添加WM_SIZE的消息映射函数,处理最小化时的操作。

void CYourrDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType == SIZE_MINIMIZED)
{
ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口
}
}
8、添加WM_DESTROY的消息响应函数,关闭窗口时将托盘中的应用程序图标删除BOOL CYourDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
// 在托盘区删除图标
Shell_NotifyIcon(NIM_DELETE, &m_nid);
return CDialog::DestroyWindow();
}
经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。

该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出关闭菜单。

相关文档
最新文档