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());
}
}