MFC实现程序最小化至托盘

1:在主程序头文件中声明有关于任务栏类函数的对象 NOTIFYICONDATA NotifyIcon;

2:在源文件中定义消息名称 如#define WM_NC (WM_USER+1001),1001只是用于指定一个消息号

3:在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加ON_MESSAGE(WM_NC,OnNotify)实现消息注册

4:OnSysCommand类有关于最小化按钮,在其中添加代码以实现功能最小化至托盘 //与窗口按钮有关,也可通过OnClose响应

NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);           //加载图标
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,"NotifyIcon Test");
NotifyIcon.uCallbackMessage=WM_NC;
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon);
ShowWindow(SW_HIDE);

5:通过类向导响应OnNotify函数,实现程序从任务栏呼出
BOOL CZXHDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
if ((lParam == WM_LBUTTONDOWN) || (lParam == WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon); //清理任务栏图标

}

return CDialog::OnNotify(wParam, lParam, pResult);
}

6:在头文件中声明一个消息响应函数afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);用于响应鼠标操作。(*)

程序BUG:在OnSysCommand类中添加CMy1Dlg::ShowWindow(SW_HIDE);最小化后使程序消失,但还在进程,导致程序无法删除,除非重启。

如果想要了解更多,欢迎加入QQ群162876848,共同探讨吧

你可能感兴趣的:(MFC实现程序最小化至托盘)