1.在**.h中定义消息名字,添加消息函数定义
#define WM_ICONNOTIFY WM_USER + 500 //图标响应消息(lParam)
afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);
2.在**.cpp添加消息映射
ON_MESSAGE(WM_ICONNOTIFY,CtestDlgDlg::OnNotifyIcon)
3.编写最小化到托盘的函数
void CtestDlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
NOTIFYICONDATA nid;
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = IDD_TESTDLG_DIALOG;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //自定义的消息名称
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
// IDR_MAINFRAME 是在托盘显示的图标
strcpy(nid.szTip,"程序名称"); //信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_ADD, &nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口
}
4.编写托盘的消息响应函数
LRESULT CtestDlgDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
POINT point;
CMenu menu;
GetCursorPos(&point);
//如果在托盘图标上双击左键
if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_LBUTTONDBLCLK))
{
ShowWindow(SW_SHOW); //显示窗体
}
//如果在托盘图标上单击右键
if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_RBUTTONDOWN))
{
menu.LoadMenu(IDR_MENU1); //加载系统主菜单
SetForegroundWindow(); //将程序置于桌面顶部
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this); //在点击图标处弹出系统菜单的第一项 /
}
return 0;
}
5.编写删除托盘图标的函数
void CtestDlgDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
NOTIFYICONDATA nc;
nc.cbSize = sizeof(NOTIFYICONDATA);
nc.hWnd = m_hWnd;
nc.uID = IDD_TESTDLG_DIALOG;
Shell_NotifyIcon(NIM_DELETE, &nc); //删除系统托盘图标
}