源代码:http://download.csdn.net/detail/nuptboyzhb/4137784

1.       导入一个托盘图标的资源(.ico)格式;资源ID为IDI_ICON1

2.       在框架程序的初始化函数中,初始化一个托盘图标的一个结构体

NOTIFYICONDATA notifyicondata;//NOTIFYICONDATA结构

notifyicondata.cbSize = sizeof(NOTIFYICONDATA);//为notifyicondata结构体分配空间

//为notifyicondata结构体各个参数赋值

notifyicondata.hWnd = m_hWnd;//窗口的句柄

notifyicondata.uID = IDI_NOTIFYICON; //ID标识

notifyicondata.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;

notifyicondata.uCallbackMessage = WM_ADDTRAYICON;//回调消息的标识;我们要为回调消息的标识添加用户消息映射

notifyicondata.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);//加载托盘图标

wcscpy(notifyicondata.szTip, _T("为程序创建托盘图标"));

Shell_NotifyIcon(NIM_ADD, &notifyicondata);       //装载托盘图标

注意:在该步骤中有几个注意的变量:

a.       m_hWnd是整个应用程序窗口的句柄

b.       IDI_NOTIFYICON是我们自己定义的一个常量;即在头文件上添加如下代码:

#define IDI_NOTIFYICON 100       //托盘图标标识

c.       WM_ADDTRAYICON是我们自定义消息的标识,也是一个常量;

#define WM_ADDTRAYICON  WM_USER+101//自定义消息

3.       添加用户消息映射和消息处理函数

1.       添加成员函数:

afx_msg LRESULT OnAddTrayIcon(WPARAM wParam,LPARAM lParam);

2.       添加消息映射

ON_MESSAGE(WM_ADDTRAYICON, OnAddTrayIcon)//添加消息映射

注意:第一个参数是用户自定义消息的标识;第二个参数是消息响应处理函数

3.       实现消息响应处理函数OnAddTrayIcon

LRESULT 类名::OnAddTrayIcon(WPARAM wParam,LPARAM lParam)

{

if (wParam == IDI_NOTIFYICON)//为创建的托盘图标

{

switch(lParam)//消息的类型

{

case WM_LBUTTONDBLCLK://双击左键

//实习窗口的隐藏或显示

//AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);//隐藏窗口

break;

case WM_RBUTTONDBLCLK://双击右键

{

AfxGetApp()->m_pMainWnd->DestroyWindow();//关闭窗口

break;

}

case WM_RBUTTONDOWN://右击托盘,显示菜单

{

CMenu menu,*pSubMenu; //后面要用的CMenu对象

CPoint point;

menu.LoadMenu(IDR_POPUP_MENU); //装载自定义的右键菜单

pSubMenu = menu.GetSubMenu(0); //获取第一个弹出菜单

GetCursorPos(&point); //获取当前光标位置        pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

break;

}

}

}

return 1;

}

4.       卸载托盘。

当应用程序退出时,卸载

NOTIFYICONDATA notifyicondata;

notifyicondata.cbSize = sizeof(NOTIFYICONDATA);

notifyicondata.uFlags = 0;

notifyicondata.hWnd = m_hWnd;

notifyicondata.uID = IDI_NOTIFYICON;

Shell_NotifyIcon(NIM_DELETE, &notifyicondata);//卸载托盘图标

NOTIFYICONDATA结构体的uCallbackMessage变量,使得用户消息响应与托盘的点击等消息关联在一起;托盘的标识IDI_NOTIFYICON,恰好是用户消息响应用来判断是否是托盘传递的消息的依据;

 

 

在基于多文档或单文档的应用程序,当用户点击最小化按钮时,我们可以讲界面隐藏;

具体是,添加OnSize()消息

void CMainFrame::OnSize(UINT nType, int cx, int cy)

{

CFrameWnd::OnSize(nType, cx, cy);

if(nType == SIZE_MINIMIZED)

{

ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口

}

// TODO: 在此处添加消息处理程序代码

}

对话框的最小化托盘于此很类似,可以参考:http://justtotry.blog.163.com/blog/static/446308122011622101427208/

MFC为应用程序添加托盘(右键托盘,弹出菜单)的更多相关文章

  1. 【技术贴】7-zip 7z关联右键菜单后右键不弹出菜单的解决办法

    解决7z,7zip右键菜单 失效 右键菜单 无法弹出右键菜单 不正常 右键菜单 sb等各种疑难杂症. 1.首先先去7z的选项里面把右键关联给设置了. 用的好好的7z,正吃着火锅唱着歌忽然发现右键单文件 ...

  2. c#右键窗体弹出菜单

    在工具箱(快捷键ctrl+w+x)——菜单和工具栏中找到 在属性中用这个绑定 然后写后台代码

  3. 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)

    原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...

  4. win32进阶之路:程序托盘图标+右键弹出菜单

     开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...

  5. vc++ 如何添加右键弹出菜单

    一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...

  6. SWT中的Tree中 添加右键弹出菜单

    先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...

  7. 关于MFC主菜单和右键弹出菜单

    一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...

  8. 如何设置secureCRT的鼠标右键为弹出文本操作菜单功能

    secureCRT的鼠标右键功能默认是粘贴的功能,用起来和windows系统的风格不一致, 如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在 options菜单----&g ...

  9. 获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)

    刚开始到现在公司的时候接到一个任务:开发一个activex控件,自动操作本地exe程序,当时遇到弹出菜单无法获取的问题,还好不影响,最近又遇到这个问题,绕不过去了,于是昨天花了一个上午百度了个遍,总算 ...

随机推荐

  1. DTM initialization: failure during startup recovery, retry failed, check segment status (cdbtm.c:1603)

    安装greenplum集群出现以下错误: 20160315:13:49:16:025696 gpinitsystem:h95:jason-[INFO]:-Checking configuration ...

  2. set--常见成员函数及基本用法

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器. set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. ...

  3. 以正确的方式开源 Python 项目

    以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...

  4. 常用位操作,写8位 12864串口模式 I2C 1302 18B20

    /*以1302为例*/ void DS1302InputByte(unsigned char d)  //实时时钟写入一字节(内部函数) {     unsigned char i;     ACC ...

  5. Winform ErrorProvider控件使用

    要实现的功能:判断第一个文本框中输入的是不是字符 “a”. 最终效果: *当输入的不是a,控件旁会显示错误图标.当输入的是a,则错误图标会消失. 首先添加ErrorProvider控件. 代码: pr ...

  6. Repeater控件

    一:http://www.cnblogs.com/foolin/archive/2011/08/31/2161342.html 二:http://www.cnblogs.com/shipfi/arch ...

  7. Eclispse 换主题、皮肤、配色,换黑色主题护眼

    链接地址:http://jingyan.baidu.com/article/6c67b1d68c03be2787bb1ed6.html Eclipse写android代码时,默认的文本和框架都是白色, ...

  8. ZOJ 3702 Fibonacci

    解题思路: 找规律,不难的,打表 坑的地方在于题目限定条件 and the seed value for G(1) is a random integer t, (t>=1) 虽然都用粗体表示出 ...

  9. 10 - 应用程序间通信、本地通知、加速计、URL传输中文

    一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...

  10. 从底层简析Python程序的执行过程

    摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追 ...