1.在资源中添加图标项,通过导入源图像或重新绘制。新建图标文件时需先创建一个,然后再导入图片。改变系统默认的需导入图片,然后复制粘贴,去掉图片透明属性。
2.在程序初始化部分增加如下代码
<span style="white-space:pre"> </span>//图标句柄
HICON hIcon;
char lpszTip[] = _T("XXX");
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDI_TRAYICON),RT_GROUP_ICON);
hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
//给NOTIFYICONDATA结构赋值
//NOTIFYICONDATA tnid;
<span style="white-space:pre"> </span>tnid.cbSize = sizeof(NOTIFYICONDATA);
<span style="white-space:pre"> </span>tnid.hWnd = m_hWnd;
<span style="white-space:pre"> </span>tnid.uID = IDI_ICON1;
<span style="white-space:pre"> </span>tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
<span style="white-space:pre"> </span>tnid.uCallbackMessage = WM_SHOWTASK; //自定义消息
<span style="white-space:pre"> </span>tnid.hIcon = hIcon;
if (lpszTip)
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>tnid.szTip[0] = '\0';
//调用Shell_NotifyIcon函数通过NIM_ADD向任务栏写图标
Shell_NotifyIcon(NIM_ADD, &tnid);
//释放图标资源
if (hIcon)
DestroyIcon(hIcon);
3.添加自定义消息
该消息为响应托盘图标鼠标事件添加。
#define WM_SHOWTASK WM_USER+103
afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_SHOWTASK,onShowTask)
LRESULT Crfm2gcommDlg::onShowTask(WPARAM wParam,LPARAM lParam)
{
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{ /*
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
*/
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOWNORMAL);//简单的显示主窗口
}
break;
}
return 0;
}