原文地址: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);//获取鼠标位置到lpPoint
CMenu 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、编译程序,运行程序,看到效果!