如果将自己做的程序添加到系统托盘中,会给人一种你的程序很专业的感觉。其实要操作系统托盘很简单。首先,在对话框的头文件中添加自定义消息:
#define WM_TASKBAR WM_APP+1000
然后映射自定义消息,在如下地方添加代码:
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
// 在此处添加
ON_MESSAGE(WM_TASKBAR,OnTaskbar)
//{{AFX_MSG_MAP(CAddiconDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_MENUQUIT, OnMenuquit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后就是编写处理自定义消息的函数(右键单击弹出菜单):
LRESULT CMyDlg::OnTaskbar(WPARAM wParam, LPARAM lParam)
{
if( lParam == WM_RBUTTONDOWN )
{
CMenu* menu;
menu = new CMenu();
menu->LoadMenu(IDR_MENU1);// 菜单是要提前做好的
CMenu* pPopup=menu->GetSubMenu(0);
::SetMenuDefaultItem(pPopup->m_hMenu,0,TRUE); //设置粗体字
CPoint Point;
GetCursorPos(&Point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y,AfxGetMainWnd(),NULL);
}
return 0;
}
接下来是向系统托盘中加入图标,用函数来表示:
void CMyDlg::AddIcon()
{
//图标句柄
HICON hIcon;
char lpszTip[] = "欢迎使用本程序!";
HINSTANCE hInst = AfxFindResourceHandle(
MAKEINTRESOURCE(IDR_MAINFRAME),RT_GROUP_ICON);
hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
//给NOTIFYICONDATA结构赋值
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDR_MAINFRAME;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = WM_TASKBAR; //自定义消息
tnid.hIcon = hIcon;
if (lpszTip)
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0] = '/0';
//调用Shell_NotifyIcon函数通过NIM_ADD向任务栏写图标
Shell_NotifyIcon(NIM_ADD, &tnid);
//释放图标资源
if (hIcon)
DestroyIcon(hIcon);
}
最后是编写删除托盘图标的函数:
void CMyDlg::DelIcon()
{
//提供结构大小,窗口句柄和图标ID
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDR_MAINFRAME;
//用NIM_DELETE删除图标
Shell_NotifyIcon(NIM_DELETE, &tnid);
}