c++ win32程序实现系统托盘图标

来源:赵克立博客 分类: C/C++ 标签:C/C++发布时间:2014-09-16 23:09:00最后更新:2014-09-17 00:48:06浏览:5411
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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());   
			}
	}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python