1、在窗口类的.h文件中添加变量:NOTIFYICONDATA pnid;
2、在窗口类的.CPP文件中自定义消息:WM_MYMESSAGE
3、在窗口类的初始化函数OnInitDialog中添加代码:
pnid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
pnid.hWnd = m_hWnd;
pnid.uID = (UINT)m_hIcon;
pnid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
//图标有效|自定义消息有效|鼠标指向显示文字有效
pnid.uCallbackMessage = WM_MYMESSAGE;
pnid.hIcon = m_hIcon;
strcpy(pnid.szTip,"局域网监控系统客户端");
4、为WM_MYMESSAGE添加消息响应函数:
BEGIN_MESSAGE_MAP(CClientDlg, CDialog)
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
ON_WM_SIZE()//窗口消息(在类向导中添加)
END_MESSAGE_MAP()
5、OnMyMessage函数的实现:
LRESULT CClientDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
if (lParam == WM_LBUTTONDOWN)//如果在图标中单击左键则还原
{
Shell_NotifyIcon(NIM_DELETE,&pnid);//删除托盘图标
ShowWindow(SW_SHOWNORMAL);//显示主窗口
//使窗口总是在最前面
this->SetWindowPos(&wndTopMost,0,0,0,0,
SWP_NOMOVE|SWP_NOSIZE);
}
return 0;
}
6、在类向导中为对话框添加ON_WM_SIZE()消息,并实现OnSize函数
void CClientDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (nType==SIZE_MINIMIZED)//如果事件为最小化
{
Shell_NotifyIcon(NIM_ADD,&pnid);//在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口
}
}