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

原文地址: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、编译程序,运行程序,看到效果!


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值