1、新建一个MFC基于对话框程序
2、对话框中成员的申明
(1)在C***Dlg.h中#param once 下面添加 #define WM_TASKMESSAGE WM_USER+1
(2)在C***Dlg.h类的申明中添加(不管是公有还是私有的)
afx_msg LRESULT OnTaskMessage(WPARAM wParam, LPARAM lParam); afx_msg void OnShow(); afx_msg void OnClose();
(4)在C***Dlg.h类的申明中添加(不管是公有还是私有的) NOTIFYICONDATA m_icon;
(5)对话框资源中添加一个按钮 ID改为IDC_HIDE并添加响应函数
(6)打开resource.h文件,添加ID_SHOW,和ID_CLOSE的宏定义
(7)在C***Dlg.cpp的BEGIN_MESSAGE_MAP(CStatusBarIconDlg, CDialog)和END_MESSAGE_MAP()之间添加
ON_MESSAGE(WM_TASKMESSAGE,OnTaskMessage)//结尾不要加分号 ON_COMMAND(ID_SHOW, OnShow) ON_COMMAND(ID_CLOSE, OnClose)
3、对话框成员函数的实现
(1)添加LRESULT OnTaskMessage(WPARAM wParam, LPARAM lParam)、OnShow()和OnClose()的实现代码
LRESULT C***Dlg::OnTaskMessage(WPARAM wParam, LPARAM lParam) { switch(lParam) { case WM_LBUTTONUP://如果在图标上发生鼠标左键消息,则显示窗口,删除托盘图标 ShowWindow(SW_SHOW); Shell_NotifyIcon(NIM_DELETE, &m_icon); break; case WM_RBUTTONUP: CMenu popmenu; POINT point; ::GetCursorPos(&point);//获取当前鼠标的位置 popmenu.CreatePopupMenu();//创建一个弹出式菜单 popmenu.AppendMenu(MF_STRING, ID_SHOW, L"显示"); popmenu.AppendMenu(MF_STRING, ID_CLOSE, L"关闭");//添加两个菜单项 SetForegroundWindow(); //这句话的作用是当弹出菜单失去焦点自动消失 popmenu.TrackPopupMenu(TPM_LEFTBUTTON, point.x, point.y, this);//显示弹出式菜单 popmenu.Detach(); break; } return 0; } void C***Dlg::OnShow() { // TODO: 在此添加命令处理程序代码 ShowWindow(SW_SHOW); Shell_NotifyIcon(NIM_DELETE, &m_icon); } void C***Dlg::OnClose() { // TODO: 在此添加命令处理程序代码 OnClose(); }
(2)在OnBnClickedHide()中添加如下代码
Shell_NotifyIcon(NIM_ADD, &m_icon);//在托盘区域添加图标 ShowWindow(SW_HIDE);//隐藏窗口
(3)在OnInitialDialog()添加如下代码
HINSTANCE hIns = ::LoadLibrary(L"shell32.dll");//加载系统资源库 m_icon.cbSize = sizeof(NOTIFYICONDATA); m_icon.hWnd = this->m_hWnd; m_icon.uID = 115; m_icon.uFlags = NIF_ICON | NIF_MESSAGE; m_icon.uCallbackMessage = WM_TASKICON; m_icon.hIcon = ::LoadIcon(hIns, MAKEINTRESOURCE(005));//读取系统资源的图标 ::FreeLibrary(hIns);//释放资源库
源代码请在以下地址下载:
http://download.youkuaiyun.com/detail/a7320760/3618002