`
paulfzm
  • 浏览: 871045 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MFC最小化到系统托盘

    博客分类:
  • vc++
阅读更多

MFC最小化到系统托盘

--《VC编程知识总结》之一

    在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)。
线程就是用 ON_THREAD_MESSAGE(WM_NC,OnNotifyIcon)
    第四步,在要将MFC最小化到系统托盘的函数中添加如下代码:
   
   在MFC的::OnSysCommand(UINT nID, LPARAM lParam) 
  
    添加   
    if(nID==SC_MINIMIZE) {
          NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
          NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
          NotifyIcon.hWnd=m_hWnd;
          lstrcpy(NotifyIcon.szTip,"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)一句,是清除托盘图标,在这里可以没有,但在退出整个程序的时候一定要加上,不然程序退出了,托盘处还有一个图标,只有鼠标指到那里时系统才会发现是进程残留而清除,这种做法很不好!
分享到:
评论

相关推荐

    MFC最小化至系统托盘源码

    MFC最小化至系统托盘源代码,开发工具为VS2010

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

    VC 6.0 实现将对话框最小化到系统托盘,有代码和实现的所有详细步骤,能够让你很简单的时间最小化到系统托盘的需求,同时添加了右键点击系统托盘图标弹出菜单和左键双击托盘图标实现弹出对话框的功能。

    MFC实现应用程序最小化到系统托盘

    MFC实现应用程序类似QQ最小化到系统托盘功能的源代码,实际软件项目开发时很有用。

    mfc托盘程序教程和实例

    vc mfc 最小化系统托盘 图标,MFC最小化到系统托盘总结

    MFC窗口最小化到托盘,显示图标

    MFC窗体程序最小化启动,不显示在任务栏中,在右下角托盘中显示一个图标;左键单击后显示窗体,显示在屏幕右下角;右键单击后显示菜单:退出。实例通过VS2008下通过编译,正确运行。

    MFC 系统托盘的使用

    MFC 基于对话框的程序 最小化到托盘的实现

    mfc 系统托盘代码实例大全

    mfc系统托盘实例(最小化到托盘,图标变化,托盘右键菜单等) 包括其他别的控件的实例 物有所值

    MFC实现图标最小化到托盘

    一个系统托盘的开发实例,注释十分详细,VC6编译

    VC 一步一步教你把对话框最小化到任务栏托盘

    “托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。其实,托盘区的编程很简单

    时钟、数字时钟、日历,自定义窗口形状 最小化到托盘 mfc2010下的工程

    用vs2010 写的一个时钟,包含数字时钟、指针时钟和日历,点击每项的上部,可以自由移动。有托盘图标,可以在窗口头部或者托盘上右击弹出菜单。

    win32编程之系统托盘图标显示以及弹出气泡提示

    该程序使用win32编程技术实现了托盘图标所涉及的各种功能,没有使用mfc。

    MFC下的面试系统

    MFC 下的基于SqlServer2000数据库,可以随意存取数据库里面的题目,里面的视频录像还未实现(请谅解),带有评分,试题录入,成绩查询,更换皮肤功能,最小化支持托盘功能,适合初学MFC。

    自己写的智能关机 能够定时关机 重启注销等源代码 VC6.0 MFC

    自己写的智能关机 能够定时关机 重启注销等源代码 VC6.0 MFC 其中还有最小化到系统托盘 功能

    vc实现体系托盘 像qq一样托盘

    vc实现像qq一样的系统托盘源代码,能够最小化到桌面右下角

    vc实现系统托盘.doc

    我们知道QQ点关闭以后,软件并没有退出,而是最小化到了右下角,要退出程序,必须右键点击小企鹅图标,在弹出菜单里面点击<退出>才可以关闭QQ. 在vc里面可以实现类似QQ里面的右下角小企鹅系统托盘

    C 实现计算机自动重启

    语音教程 C++新手学习常用误区及其学习方法 类,构造函数和析构函数,类的指针详细演示 操作符重载,this,静态成员 简单介绍 ...C++最小化到系统托盘图标实例及代码 C++实现获取屏幕任意点的颜色 ·····

    VC 制作显示托盘图标的闹铃程序.rar

    一个闹铃程序,VC 制作的可以显示托盘图标的闹钟程序,设定的时间到,会以弹出对话框MessageBox的形式发出警报提醒,将程序图标放入系统托盘,响应在托盘图标上的单击,屏蔽最大化(MFC Bug),将最小化重定向至隐藏...

    基于vc++的指针式时钟程序代码

    (1)时钟界面中有时针,分针,秒针; (2)根据系统时间,各类指针能够正确的吧动态转动; (3)用户可以通过对话框重新设定时间,设定完毕后时针...(4)可最小化到系统托盘区,用户点击最小化图标能够恢复显示界面

    MFC歌词弹幕机源码(斗鱼弹幕).rar

    5、最小化会隐藏到右下角托盘区,双击可恢复窗口;进入发送状态也会隐藏到托盘区,此时按Esc键(或者托盘右键点停止)可退出当前歌曲发送状态并恢复窗口 6、已知BUG: 不能和360安全卫士同时使用(没有病毒,因为360...

Global site tag (gtag.js) - Google Analytics