Posted on 2009-04-03 17:55
besterChen 阅读(1393)
评论(0) 编辑 收藏 引用 所属分类:
WTL/MFC/GuiLib
看过一些文章,再网上也找了好多的资料,发现都比较麻烦,等自己操作了一遍以后才知道,原来不难的,现在把操作过程记录下来,具体如下:
第一步,声明一个NOTIFYICONDATA类,即:
NOTIFYICONDATA NotifyIcon;
该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。
第二步,声明一个响应函数
afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);
用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。
这里顺手贴一些我写的代码:
void CbeskitDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
if (IParam == WM_LBUTTONUP)
{
// 左键单击弹出主界面
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
}
else if (IParam == WM_RBUTTONDOWN)
{
//右键单击弹出主菜单
}
}
第三步,定义消息名称和消息号
:#define WM_NC WM_USER+1001 //用来处理鼠标指向托盘图标时的提示信息
1001只是用于指定一个消息号,可以随便指定。
第四步,注册上一步自定义的消息的处理函数,
就是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加
ON_MESSAGE(WM_NC,OnNotifyIcon)。
第五步,添加将图标加入系统托盘的代码:
// 用于加载到托盘区
m_NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
m_NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 装载程序图标
m_NotifyIcon.hWnd=m_hWnd;
lstrcpy(m_NotifyIcon.szTip,"beskit v1.0"); // 这里是鼠标移到托盘图标时的提示信息
m_NotifyIcon.uCallbackMessage=WM_NC;
m_NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon); // 添加托盘图标
只要执行上述代码,就会在系统托盘区添加一个程序图标。
第六步,捕捉程序最小化的消息:
在OnSysCommand中增加:
else if( (nID & 0xFFF0) == SC_MINIMIZE)
{
toTray(); //放入托盘的函数
}
到这里就可以了!
添加好了图标以后,等程序退出或者其它条件,需要把图标从系统托盘区删除,执行下面的代码:
Shell_NotifyIcon(NIM_DELETE, &m_NotifyIcon);//删除托盘图标