1 在头文件里面定义 消息

#define  WM_SHOWTASK  WM_USER+10

在主窗口类里面定义 一个变量 两个函数

  a 变量 托盘结构体的变量

NOTIFYICONDATA m_nid;

  b 初始化上述变量的函数

void ToTray(void);

  c 托盘的消息处理函数

LRESULT onShowTask(WPARAM wParam,LPARAM lParam);

2 在cpp里面 添加一下内容

  a 在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间添加映射消息

ON_MESSAGE(WM_SHOWTASK,onShowTask)

  b 在初始化函数托盘结构体 初始化的函数

ToTray();

  c  添加 托盘结构体 初始化

void CNotifyiconTestDlg::ToTray(void)
{ 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;
//自定义的消息名称 WM_SHOWTASK 头函数中定义为WM_USER+10
m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
StrCpyW(m_nid.szTip,L"托盘图标");//当鼠标放在上面时,所显示的内容
Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盘区添加图标
}

  d 消息处理函数的实现

LRESULT CNotifyiconTestDlg::onShowTask(WPARAM wParam,LPARAM lParam) //wParam接收的是图标的ID,lParam接收的是鼠标的行为
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
menu.AppendMenu(MF_STRING,WM_DESTROY,L"退出");
//确定弹出式菜单的位置
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;
}

  

  注 :可以把ToTray 函数去掉,把函数内容放到初始化里面

mfc 对话框程序 托盘实现的更多相关文章

  1. MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法

    http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序  屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...

  2. OSG+MFC对话框程序

    OSG的sample里面有OSG+MFC+MDI的例子. 网上有说OSG+MFCSDI的例子,如http://blog.csdn.net/xuguangsoft/article/details/816 ...

  3. VC++MFC对话框程序中给对话添加背景图片

    VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^   工具/原料 Visual C++ 2010 方法一:用Pic ...

  4. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  5. 添加RichEdit控件后导致MFC对话框程序无法运行的解决方法

    新建一个基于对话框的MFC程序,对话框上添加了RichEdit控件,编译成功后无法运行起来,Debug版本与Release版本均不行! Windbg分析结果: WARNING: Stack unwin ...

  6. MFC对话框程序EDIT类控件的自动换行,垂直滚动条自动下移

    1.新建一个Edit Control,将其Multiline属性设置为True,Auto HScroll属性设置False,这样就可以实现每一行填满后自动换行了.   2.再将Vetrical Scr ...

  7. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  8. 在c++MFC下用PCL显示操作点云文件 MFC对话框显示操作PCL点云

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/13115873.html 第一步 下载PCL库  我的版本是1.8.1的 你都要MFC下跑PCL ...

  9. MFC模态对话框程序不响应OnIdle

    从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinT ...

随机推荐

  1. 使用 ConfigurationSection 创建自定义配置节

    我们可以通过用自己的 XML 配置元素来扩展标准的 ASP.NET 配置设置集,要完成这一功能,我们必须实现继承System.Configuration.ConfigurationSection 类来 ...

  2. atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了

    atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了 1. React的组件化才是web ui部件的正确方向1 1.1. 组件化集成html ,css ...

  3. iOS5 ARC,IBOutlets 应该定义strong还是weak

    转自:http://blog.csdn.net/yiyaaixuexi/article/details/7864974 写这篇文章的缘由,是因为我泡在stackoverflow上翻帖子,看到一个名为S ...

  4. JS高程3:面向对象的程序设计——理解对象

    JS中对象的定义: (无序)属性的集合 (无序)值的集合 (无序)名值对的集合 JS对象是基于引用数据类型来创建的. JS对象创建的2种方式: 传统方式 对象字面量 var person = new ...

  5. layui点击table表格的每一格时显示相应的内容

    $(document).on('click','.layui-table-cell',function(){ // $("p").css({"background-col ...

  6. linux内存排查工具valgrind

    官网:http://valgrind.org/info/about.html 百科介绍:http://baike.baidu.com/link?url=ZdXzff0omzoPpE_yZUlNW9lJ ...

  7. (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

     在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...

  8. async and await 简单的入门

    如果有几个Uri,需要获取这些Uri的所有内容的长度之和,你会如何做? 很简单,使用WebClient一个一个的获取uri的内容长度,进行累加. 也就是说如果有5个Uri,请求的时间分别是:1s 2s ...

  9. android6.0 adbd深入分析(二)adb驱动数据的处理、写数据到adb驱动节点

     上篇博客最后讲到在output_thread中.读取了adb驱动的数据后.就调用write_packet(t->fd, t->serial, &p)函数,把数据网socket ...

  10. The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统

    模板系统不是django特有的,它是python的一个库,你可以在任何地方使用它. 使用方法: 1.使用 Template()方法创建Template对象.2.调用Template对象的render( ...