c++ win32程序实现系统托盘图标
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2014-09-17 00:48:06
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
废话不多说直接看示例下面是使用到的结构体和函数
//系统定义结构体 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有效 */ WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid); /* ---Pnid是NOTIFYICONDATA结构的指针; dwMessage是被传递的消息,可以是以下消息之一: NIM_ADD 增加图标 NIM_DELETE 删除图标 NIM_MODIFY 修改图标 */下面看一个示例
//引入头文件 #include "shellapi.h" //首页在头文件中自定义一个托盘消息常量 #define MYWM_NOTIFYICON WM_USER+1 //其次在你的主窗口类中添加一个NOTIFYICONDATA保存托盘 信息的变量 protected: NOTIFYICONDATA m_tnid; //然后在窗口类的OnCreate()过程中创建托盘图标 //添加托盘图标 m_tnid.cbSize=sizeof(NOTIFYICONDATA); m_tnid.hWnd=this->m_hWnd; m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; m_tnid.uCallbackMessage=MYWM_NOTIFYICON; //用户定义的回调消息 CString szToolTip; szToolTip=_T("抓取网络内容"); //鼠标在托盘上移动时显示文本 _tcscpy(m_tnid.szTip, szToolTip); m_tnid.uID=IDB_PNG1; HICON hIcon; hIcon=::LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON1)); m_tnid.hIcon=hIcon; ::Shell_NotifyIcon(NIM_ADD,&m_tnid); if(hIcon)::DestroyIcon(hIcon);运行后就可以在托盘看到图标啦
下面对图标添加一些响应消息
处理图标回调消息,如鼠标左键双击、鼠标右键单击消息,
if (uMsg==MYWM_NOTIFYICON){ //如果是用户定义的消息 if(lParam==WM_LBUTTONDBLCLK) { //鼠标双击时主窗口出现 ShowWindow(SW_SHOW); }else if(lParam==WM_RBUTTONDOWN){ //鼠标右键单击弹出菜单 //CMenu menu; //menu.LoadMenu(IDR_RIGHT_MENU); ////载入事先定义的菜单 //CMenu* pMenu=menu.GetSubMenu(0); //CPoint pos; //GetCursorPos(&pos); //pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd()); } }