在windows系统任务栏的托盘中显示图标 c++
来源:互联网 发布:java形参和实参的区别 编辑:程序博客网 时间:2024/04/29 07:12
- //在windows系统任务栏的托盘中显示图标
- //使用vc6.0++
- //代码改编自《TCP/IPX协议及网络编程技术》第22章,罗军舟等著,清华大学出版社
- //
- // 托盘指的是windows桌面窗口右下角显示图标的区域
- // 管理托盘图标的函数是Shell_NotifyIcon
- // 为了简化使用,定义了CyctNotifyIcon类,封装了Shell_NotifyIcon
- // 该类用于构建、维护任务栏图标,主要目的是为了用户提供基于任务
- // 栏图标的图形化使用界面。
- //========================================================
- //======yctNotifyIcon.h文件===================
- //注意:代码并不完整,只包含必需的代码
- class CyctNotifyIcon
- {
- private:
- NOTIFYICONDATA m_NotifyIconData;//NOTITYICONDAT结构
- void FillNotifyIconData(UINT uIDResource, const char *chTip);
- public:
- CyctNotifyIcon(HWND hWnd, UINT uCallbackMessage);
- virtual ~CyctNotifyIcon();
- void AddIcon(UINT uIDResource, const char *chTip);
- void ChangeIcon(UINT uIDResource, const char *chTip);
- void DeleteIcon();
- };
- //========================================================
- //======yctNotifyIcon.cpp文件===================
- #include "stdafx.h"
- #include "yctNotifyIcon.h"
- CyctNotifyIcon::CyctNotifyIcon(HWND hWnd, UINT uCallbackMessage)
- {
- //hWnd: 指定使用任务栏托盘图标的应用程序的窗口句柄
- //uCallbackMessage: 指定任务栏托盘图标鼠标事件的用户回调消息;
- // 可以参考msdn中的NOTIFYICONDATA结构
- memset(&m_NotifyIconData, 0, sizeof(NOTIFYICONDATA));
- m_NotifyIconData.hWnd = hWnd;
- ASSERT(m_NotifyIconData.hWnd != NULL);
- m_NotifyIconData.uCallbackMessage = uCallbackMessage;
- }
- CyctNotifyIcon::~CyctNotifyIcon()
- {
- }
- void CyctNotifyIcon::FillNotifyIconData(UINT uIDResource, const char *chTip)
- {
- //填充NOTITYICONDAT结构
- //uIDResource:指定图标资源ID
- //chTip:指定在托盘图标上显示的ToolTip文本
- HICON hIcon = AfxGetApp()->LoadIcon(uIDResource);
- m_NotifyIconData.cbSize = sizeof(NOTIFYICONDATA);
- m_NotifyIconData.hIcon = hIcon;
- sprintf(m_NotifyIconData.szTip,chTip);
- m_NotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
- m_NotifyIconData.uID = uIDResource;
- }
- void CyctNotifyIcon::AddIcon(UINT uIDResource, const char *chTip)
- {
- //添加(在托盘中的)图标和ToolTip文本
- //uIDResource:指定图标资源ID
- //chTip:指定在图标上显示的ToolTip文本
- FillNotifyIconData(uIDResource, chTip);
- Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData);
- }
- void CyctNotifyIcon::ChangeIcon(UINT uIDResource, const char *chTip)
- {
- //改变(在托盘中的)图标和ToolTip文本
- //uIDResource:指定图标资源ID
- //chTip:指定在图标上显示的ToolTip文本
- FillNotifyIconData(uIDResource, chTip);
- Shell_NotifyIcon(NIM_MODIFY, &m_NotifyIconData);
- }
- void CyctNotifyIcon::DeleteIcon()
- {
- //删除任务栏图标
- Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData);
- }
使用示例步骤:
1)在CMainFrame中定义成员变量及构造函数中初始化:
- CyctNotifyIcon* m_pNotifyIcon;
- CMainFrame::CMainFrame()
- {
- ......
- m_pNotifyIcon = NULL;
- ......
- }
2)自定义YCT_NOTIFY_ICON消息及其响应函数:
- #define YCT_NOTIFY_ICON WM_USER+15 //自定义消息
- LRESULT CMainFrame::OnNotifyIcon( WPARAM wParam, LPARAM lParam )
- {
- //YCT_NOTIFY_ICON消息响应函数
- //用于响应任务栏图标的鼠标事件
- //wParam:任务栏图标的ID
- //lParam:鼠标事件值
- //附:此消息的触发来自于CMainFrame::OnCreate中CyctNotifyIcon构造函数的第二个参数的设定
- switch(lParam)
- {
- case WM_RBUTTONUP:
- //做自己想自己的事,如弹出右键菜单
- ......
- break;
- case WM_LBUTTONDBLCLK:
- //做自己想自己的事,如显示主窗口
- ......
- break;
- default:
- ;
- }
- return 0;
- }
3)(利用ClassWizard)重载OnCreate函数:
- int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- ......
- //显示windows任务栏图标
- if(m_pNotifyIcon == NULL)
- {
- m_pNotifyIcon = new CyctNotifyIcon(this->GetSafeHwnd(),
- YCT_NOTIFY_ICON);
- m_pNotifyIcon->AddIcon(IDR_MAINFRAME,(char *)YCT_TASKBAR_TOOLTIP_TEXT);
- }
- ......
- }
4)重载OnDestroy函数;目的:删除任务栏图标。
- void CMainFrame::OnDestroy()
- {
- CFrameWnd::OnDestroy();
- ......
- //删除windows任务栏图标
- if(m_pNotifyIcon != NULL)
- m_pNotifyIcon->DeleteIcon();
- }
5)在析构函数中释放m_pNotifyIcon:
- CMainFrame::~CMainFrame()
- {
- ......
- if(m_pNotifyIcon != NULL)
- delete m_pNotifyIcon;
- ......
- }
水平有限,如有错误请指正。
- 在windows系统任务栏的托盘中显示图标 c++
- 让MSN图标显示在Windows 7系统任务栏中
- 解决Java程序的托盘图标在Windows任务栏重建后丢失的问题(使用SystemTray类创建托盘图标)
- C#Windows 窗体设计-实现欢迎界面-显示About窗体-在托盘中写入应用程序图标
- 在Windows Mobile 中最小化,显示图标再任务栏上
- 如何在Windows的任务栏的托盘上加一个快捷图标
- 关于对话框最小化到托盘后,点击托盘图标后只在任务栏显示而无法还原窗口的解决方法。
- VB6 中实现图标显示在系统右下角托盘的方法
- Windows XP中当最小化程序时,无法在任务栏显示图标的问题
- 修复Windows XP中当最小化程序时,无法在任务栏显示图标的问题
- Windows XP中当最小化程序时,无法在任务栏显示图标的问题
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- C# 在任务栏中显示应用程序图标
- 在任务栏中显示音量图标
- MFC程序任务栏托盘图标的实现
- c#在托盘显示图标
- 在VS2105中设置QT程序的图标ICON 和程序系统任务栏图标
- 如何设计低功耗嵌入式系统
- file 读取写入文件 HTML
- linux硬盘安装方法
- 如何同时打开Microsoft Visual C++ 6.0 多个实例。
- 最可怕的是
- 在windows系统任务栏的托盘中显示图标 c++
- arrayList的应用
- 关键字加亮
- LPC2136 --- Uart0
- 转:秋天的树~
- 键盘ctrl+enter键触发事件
- showModalDialog()、showModelessDialog()方法使用详解
- 使用信号量管理多线程
- asp.net + sql server 面试宝典