源码下载:http://download.youkuaiyun.com/source/2840315
网上有关VC系统托盘的例子有很多,但我还是写了个例子,一方面是只要稍微修改就能成为你的工程,另一方面是程序代码注释非常详细。相信我写的例子能给你带来帮助。
系统托盘的关键是NOTIFYICONDATA结构:
| 以下是代码片段: typedef struct _NOTIFYICONDATA { DWORD cbSize; //结构大小 (以字节为单位) HWND hWnd; //接收托盘图标通知消息的窗口句柄 UINT uID; //应用程序定义的该托盘图标的ID号 UINT uFlags; //设置该托盘图标的属性 UINT uCallbackMessage; //应用程序定义的消息ID号,此消息传递给hWnd HICON hIcon; //托盘图标的句柄 char szTip[64]; //鼠标停留在托盘图标上显示的提示信息 } NOTIFYICONDATA, *PNOTIFYICONDATA; |
其中uFlags可以是下列组合或其中之一:
NIF_ICON //设置成员hIcon有效
NIF_MESSAGE //设置成员uCallbackMessage有效
NIF_TIP //设置成员szTip有效
还有一个重要的函数是:
Shell_NotifyIcon()功能是在系统托盘上增加、删除或修改图标。
其原型为:
| 以下是代码片段: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid); Pnid是NOTIFYICONDATA结构的指针。 dwMessage是被传递的消息,可以是以下消息之一: NIM_ADD //增加图标 NIM_DELETE //删除图标 NIM_MODIFY //修改图标 |
这些具体的实现体现在例子程序的初始化托盘InitTray()中:
//初始化托盘
| 以下是代码片段: void CTrayDemoDlg::InitTray() { nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_NOTIFYICON;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip,"托盘例子"); //信息提示 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标 } |
另外 还有的就是定义了一个消息处理函数,用于响应鼠标单击或双击等事件。
具体的实现请参考附带的例子吧。
本文详细介绍如何使用VC创建系统托盘图标,包括NOTIFYICONDATA结构解析及Shell_NotifyIcon函数的应用,并提供了完整的示例代码。
189

被折叠的 条评论
为什么被折叠?



