【转载、修改、增强】MFC基于对话框程序如何最小化到托盘?

来源:互联网 发布:淘宝如何装修店铺教程 编辑:程序博客网 时间:2024/06/17 00:17

原文地址:http://jingyan.baidu.com/article/0aa22375e2089588cd0d6410.html

本文以Visual C++ 6.0为例,介绍mfc程序最小化到托盘的方法。


1、打开编程软件,新建一个基于对话框的MFC程序,命名为ShowTask,设计好程序界面:

2、右键点击程序设计界面的“ShowTask”对话框,选择“属性”。

3、切换到“样式(Style)”选项卡。



4、勾选【最小化框(N)】复选框,关闭此对话框。


5、在ShowTaskDlg.h文件中添加代码(具体位置看图):

#define WM_SHOWTASK (WM_USER + 1) //声明自定义消息WM_SHOWTASK


6、还是在ShowTaskDlg.h里,在两处分别添加代码(具体位置看图):

第1处代码:

void ToTray();//声明最小化到托盘的函数void DeleteTray();//声明从托盘还原的函数

第2处代码:

afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);//声明自定义的托盘消息


7、在ShowTaskDlg.cpp文件的消息映射处添加代码:

ON_MESSAGE(WM_SHOWTASK,OnShowTask)



8、在ShowTaskDlg.cpp文件中找到OnSysCommand函数,添加代码:

if(nID == SC_MINIMIZE)//如果用户点击了【最小化】按钮{ToTray();//最小化到托盘}


9、在ShowTaskDlg.cpp文件中的最下面添加三个函数:

void CShowTaskDlg::ToTray()//最小化到托盘函数{NOTIFYICONDATA nid;nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);nid.hWnd = this->m_hWnd;nid.uID = IDR_MAINFRAME;nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//设置图标strcpy(nid.szTip,"程序名称");//设置鼠标移动到图标上时的提示信息Shell_NotifyIcon(NIM_ADD,&nid);//放置托盘图标ShowWindow(SW_HIDE);//隐藏主窗口}


LRESULT CShowTaskDlg::OnShowTask(WPARAM wParam, LPARAM lParam)//托盘消息函数{if(wParam != IDR_MAINFRAME){return true;}switch(lParam){case WM_RBUTTONUP://右键点击图标时{LPPOINT lpPoint = new tagPOINT;::GetCursorPos(lpPoint);//获取鼠标位置到lpPointCMenu menu;menu.CreatePopupMenu();//创建菜单menu.AppendMenu(MF_STRING,WM_DESTROY,"退出");//添加菜单项“退出”menu.TrackPopupMenu(TPM_LEFTALIGN,lpPoint->x,lpPoint->y,this);//设置菜单弹出位置HMENU hmenu = menu.Detach();menu.DestroyMenu();}break;case WM_LBUTTONUP://左键点击图标时{this->ShowWindow(SW_SHOWNORMAL);//显示主窗口DeleteTray();//删除托盘图标//设置主窗口为当前活动窗口 开始this->SetActiveWindow();            this->SetForegroundWindow();            this->BringWindowToTop();//设置主窗口为当前活动窗口 结束}break;default: break;}return false;}


void CShowTaskDlg::DeleteTray()//删除托盘图标函数{NOTIFYICONDATA nid;nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);nid.hWnd = this->m_hWnd;nid.uID = IDR_MAINFRAME;nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;nid.uCallbackMessage = WM_SHOWTASK;nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));strcpy(nid.szTip,"程序名称");Shell_NotifyIcon(NIM_DELETE,&nid);//删除托盘图标}


10、编译程序,运行程序,看到效果!


原创粉丝点击