C++对话框系统托盘实现
2012-07-13 15:47
351 查看
背景需求:
1、MFC对话框最小化时,只显示系统右下角托盘图标。
2、双击托盘,对话框还原。
3、右键点击托盘,弹出“关闭”菜单,可关闭对话框。
参考:http://baike.baidu.com/view/1773959.htm。
实现步骤:
1、创建MFC对话框程序(本例程序名为TaskbarIcon),属性中设置“MinimizeBox”为true。
2、定义自定义消息宏。
3、OnSysCommand(系统消息响应函数)添加对话框最小化执行代码。
4、托盘自定义消息响应
5、关闭时删除托盘图标。
覆盖(override)OnCancel函数。
1、MFC对话框最小化时,只显示系统右下角托盘图标。
2、双击托盘,对话框还原。
3、右键点击托盘,弹出“关闭”菜单,可关闭对话框。
参考:http://baike.baidu.com/view/1773959.htm。
实现步骤:
1、创建MFC对话框程序(本例程序名为TaskbarIcon),属性中设置“MinimizeBox”为true。
2、定义自定义消息宏。
#define NOTIFY_SHOW WM_USER+2500
3、OnSysCommand(系统消息响应函数)添加对话框最小化执行代码。
void CTaskbarIconDlg::OnSysCommand(UINT nID, LPARAM lParam) { if (SC_MINIMIZE == nID) { NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = this->m_hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage = NOTIFY_SHOW;//自定义的消息名称 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); wcscpy_s(nid.szTip, _T("图标测试"));//信息提示条 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标 ShowWindow(SW_HIDE);//隐藏主窗口 return; } //...系统自带代码 }
4、托盘自定义消息响应
BEGIN_MESSAGE_MAP(CTaskbarIconDlg, CDialog) //...省略其他消息映射 ON_MESSAGE(NOTIFY_SHOW, OnTrayIcon) //}}AFX_MSG_MAP END_MESSAGE_MAP() afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam); LRESULT CTaskbarIconDlg::OnTrayIcon(WPARAM wParam, LPARAM lParam) { if (wParam != IDR_MAINFRAME) { return 1; } switch(lParam) { case WM_RBUTTONUP: { //右键起来时弹出快捷菜单,这里只有一个“关闭” //声明一个弹出式菜单 //增加菜单项“关闭”,点击则发送消息WM_CLOSE给主窗口(已 //隐藏),将程序结束。 CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("关闭")); //得到鼠标位置 LPPOINT lpoint= new tagPOINT; ::GetCursorPos(lpoint); //确定弹出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y,this); //资源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; lpoint = NULL; break; } case WM_LBUTTONDBLCLK: { //双击左键的处理 //显示界面 ShowWindow(SW_SHOW); //界面置顶 SetForegroundWindow(); break; } } return 0; }
5、关闭时删除托盘图标。
覆盖(override)OnCancel函数。
virtual void OnCancel(); void CTaskbarIconDlg::OnCancel() { //删除任务栏图标 NOTIFYICONDATA nid; nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; Shell_NotifyIcon(NIM_DELETE, &nid); CDialog::OnCancel(); }
相关文章推荐
- C++对话框系统托盘实现
- c++实现系统托盘图标
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- c++实现系统托盘图标
- VC++MFC对话框应用程序实现程序最小化到系统托盘
- C++ 系统托盘图标实现
- VC实现将对话框最小化到系统托盘
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- VC实现将对话框最小化到系统托盘
- C++ 实现Windows系统设备枚举
- VC 中实现系统托盘
- “基于关键字匹配的文本过滤系统”配置文件的设计和实现(C/C++源码)
- C++实现的小型图书管理系统
- 烟台汽车行程显示系统 c++ 实现
- atitit.系统托盘图标的设计java swing c# .net c++ js
- Linux 环境下C/C++获取系统时间 && 每隔500ms循环一次代码实现
- C#实现窗口最小化到系统托盘
- 使对话框应用程序具有系统托盘功能
- 对话框托盘程序实现源码
- C++实现简易log日志系统