源代码: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, ¬ifyicondata); //装载托盘图标
注意:在该步骤中有几个注意的变量:
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, ¬ifyicondata);//卸载托盘图标
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: 在此处添加消息处理程序代码
}
分享到:
相关推荐
vs2010 MFC程序最小化到托盘,右键弹出菜单进行设置和退出,双击桌面最前显示
简单的MFC应用实例,可以弹出新窗口,最小化到托盘,并设置右键菜单
用vs2008 编译,Unicode 环境下,实现最小化 托盘显示,左键双击弹出主窗口,右键单击弹出菜单
可以更改为仅是左键或者右键按下弹出菜单, 或者仅中键按下弹出菜单,或者鼠标移动弹出菜单. 可以指定"不同的鼠标消息弹出不同的菜单". 可以将托盘通知消息转发到指定的窗口并且可以动态改变, 但是接收通知消息的窗口...
VC 6.0 实现将对话框最小化到系统托盘,有代码和实现的所有详细步骤,能够让你很简单的时间最小化到系统托盘的需求,同时添加了右键点击系统托盘图标弹出菜单和左键双击托盘图标实现弹出对话框的功能。
用VC+MFC 实现托盘管理,支持热键,图标闪烁,右键菜单,消息框渐现等功能,所有功能均测试通过,请放心使用,欢迎关注!
程序启动后会在系统托盘(右下角)创建图标,图标上右键会出现选项菜单。可以更改设置。不含恶意代码,如有需要请放心点击“设成开机启动”,此过程可逆。 内含源代码。Release里面是可执行程序。注意data文件夹...
我们知道QQ点关闭以后,软件并没有退出,而是最小化到了右下角,要退出程序,必须右键点击小企鹅图标,在弹出菜单里面点击<退出>才可以关闭QQ. 在vc里面可以实现类似QQ里面的右下角小企鹅系统托盘
255.如何为应用程序自定义加速键 256.如何创建热键及其消息处理函数 257.如何判断是否同时按下了鼠标键和Ctrl键 258.如何判断鼠标按键是否单击了标题栏 259.如何跟踪显示鼠标移动的当前位置 260.如何在桌面上创建...
MFC小例子: 1. 枚举窗口 2. 按钮激活:利用枚举窗口和EnableWindow实现 ...4. 图片浏览器:包含gdi+ 播放....5. 模拟键鼠消息:使用SendInput实现 ...10. 托盘图标:实际QQ闪烁效果,并添加双击弹出,右键菜单功能
本文简述了在程序不支持MFC,CMenu不可用的情况下,动态创建系统托盘菜单的方法。由于菜单项是不确定的,因而就需要用 sdk 创建一个动态弹出菜单。 主要实现代码如下: //------------------ code begin ----------...
原生win32非MFC代码,锁屏后电子时钟分别显示当前时间与解锁时间,还有妹子眨眼伴君度过等待时光,程序添加了托盘图标与右键菜单,是学习的好参考代码。
另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...