在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现:

第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICONDATA NotifyIcon;该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。
    第二步,声明一个响应函数afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。
    第三步,定义消息名称以消息号,并注册消息,该步很重要!我就是因为没有注册消息,导致调试了很久都找不到问题所在。该步都是在Dlg.cpp(Dlg的实现中)中操作。定义消息名称和消息号:#define WM_NC (WM_USER+1001),1001只是用于指定一个消息号,可以随便指定。注册则是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加ON_MESSAGE(WM_NC,OnNotifyIcon)。
    第四步,在要将MFC最小化到系统托盘的函数中添加如下代码:

void MinDialog(){     NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);    NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);    NotifyIcon.hWnd=m_hWnd;    lstrcpy(NotifyIcon.szTip,_T("NotifyIcon Test"));    NotifyIcon.uCallbackMessage=WM_NC;    NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;    Shell_NotifyIcon(NIM_ADD,&NotifyIcon);}

  

有了上面的代码,当程序运行到含有如上代码的函数时就会在系统托盘处添加一个图标,想隐藏主对话框,就再添加一句ShowWindow(SW_HIDE);这样就实现了将MFC最小化到系统托盘。但还要添加点击托盘图标时响应鼠标的函数,也就是第二步中的函数OnNotifyIcon。
    第五步,OnNotifyIcon函数,如下:

    void CDlg::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);//消除托盘图标         }    }

  

以上函数写的很简单,因为我定义的是基于对话框的MFC,没有添加menu,所以只是实现了简单的点击托盘图标就弹出主对话框。对于右键点击托盘图标弹出小menu,然后选择操作,最好是建立工程的时候就选择基于菜单的MFC,这样会容易很多,详细的我自己还没有研究,就不乱讲了。对于上面函数中Shell_NotifyIcon(NIM_DELETE,&NotifyIcon)一句,是清除托盘图标,在这里可以没有,但在退出整个程序的时候一定要加上,不然程序退出了,托盘处还有一个图标,只有鼠标指到那里时系统才会发现是进程残留而清除,这种做法很不好!

转载于:https://www.cnblogs.com/flonlen/archive/2011/09/12/2174259.html

MFC最小化到系统托盘相关推荐

  1. MFC中将窗口最小化到系统托盘和还原

    通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出. 1.添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的R ...

  2. 将 VMware 最小化到系统托盘

    1, 下载 Trayconizer 官网地址: http://www.whitsoftdev.com/trayconizer/ 下载地址: http://www.whitsoftdev.com/fil ...

  3. C#实现winform软件开机自动启动并最小化到系统托盘

    一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine;             ...

  4. Delphi 7下最小化到系统托盘

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Del ...

  5. SysTrayIcon 改的 python tkinter 最小化至系统托盘

    网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面 1.点击最小化隐藏至托盘 2.托盘图标右键菜单展示,左键返回Tk界面. 托盘图标可以自定义,修改了SysTrayI ...

  6. MFC:怎么将程序窗口最小化到系统托盘

    (一)原理 1.最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标. 2.恢复的原理:将窗口显示,再将托盘中的图片删除. (二)程序实现 1.自定义消息WM_SHOWTASK: #define WM ...

  7. VC实现将对话框最小化到系统托盘

    1.minisysDlg.h头文件设置: 1)public: void setTray();//设置托盘    NOTIFYICONDATA nid;//NOTIFYICONDATA结构包含了系统用来 ...

  8. 将界面最小化到系统托盘的完整步骤

    1.界面上拖拽添加NotifyIcon控件 notifyIcon1 2.为此控件设置图标 3.添加主界面最小化事件 private bool notifyiconHasInitialzed=false ...

  9. C# 最小化到系统托盘的实现(一)

    最近做个小程序试验, 没有时间一直研究,偷偷用了些上班时间完成了. 目标:程序点击关闭后,弹出一个对话框,选择退出,最小化,或者取消.然后系统托盘双击,可以打开最小化的程序,右键有菜单,菜单里有个&q ...

最新文章

  1. 鸿蒙系统能内测吗,鸿蒙系统内测用户:使用体验已经超越ios
  2. 如何判断网站设计是否优质?
  3. 艾伟也谈项目管理,说说我们项目组的考核
  4. Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
  5. Android Studio的下载和安装教程(从ADT到AS)
  6. P3648-[APIO2014]序列分割【斜率优化】
  7. 二叉树知识点最详细最全讲解
  8. linux的arp指令
  9. MySQL日期处理-查询间隔数据
  10. Docker使用笔记-2-[之] oracle-xe安装
  11. csv导入mysql phpmyadmin_关于mysql:使用phpMyAdmin导入大型csv文件
  12. 机器学习算法中的偏差-方差权衡(Bias-Variance Tradeoff)
  13. 8月8日云栖精选夜读:他的前半生是厨神,45岁却决定加入阿里巴巴
  14. ajax load html页面,jQuery – AJAX load() 方法 | 菜鸟教程
  15. sql server 替换_SQL Server替换功能–全面指南
  16. 手把手教你在Windows环境下升级R
  17. 【c】正负数二进制表示
  18. 图片无损放大软件Topaz Gigapixel AI for Mac
  19. linux嵌入式ARM系统开发实战教程从入门到精通
  20. Word基础(八)带圈字符

热门文章

  1. python中的df是什么意思_在python中从df-h输出中选择特定列
  2. mysql loop嵌套_MySQL中Nested-Loop Join算法小结
  3. sign函数的功能oracle,Oracle中sign函数和decode函数的使用
  4. 删除空值_空白单元格行,如何快速批量删除?简单方法,效率飞升
  5. linux停止客户端,linux – 从客户端打印motd停止ssh登录?
  6. 判断字符串不包含某个字符php,java判断字符串是否包含某个字符的方法
  7. 使用Python、OpenCV进行图像接缝雕刻
  8. MySQL语句第二高的薪水查询
  9. 神经网络基础:(1)得分函数 or 得分函数
  10. Java内部类手机专卖店_Java(20)内部类