MFC 最小化到托盘及右击托盘菜单

本文介绍如何在Windows应用程序中实现托盘图标功能,包括托盘图标的添加、隐藏主窗口及响应双击和右键菜单操作。
//全局变量
NOTIFYICONDATA nid;//托盘图标全局变量
//在stdafx.h
#define WM_SHOWTASK (WM_USER + 123)
// 关联消息映射函数
// 位于BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间
	ON_MESSAGE(WM_SHOWTASK,OnShowTask)
// 当然要声明和定义OnShowTask()
// 在CtestDlg类中声明
	LRESULT OnShowTask(WPARAM wParam, LPARAM lParam) ;
void CtestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if (nID == SC_MINIMIZE) // 最小化窗口
	{
		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));
		lstrcpy(nid.szTip, _T("Getpost Domain")); // 信息提示条
		Shell_NotifyIcon(NIM_ADD, &nid); // 在托盘区添加图标 
		ShowWindow(SW_HIDE); // 隐藏主窗口 
		return;
	}
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}
LRESULT CtestDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
//wParam接收的是图标的ID,lParam接收的是鼠标的动作----最小化到托盘
{
	if (wParam != IDR_MAINFRAME)
		return 1;
	if (WM_LBUTTONDBLCLK == lParam)
	{
		this->ShowWindow(SW_SHOWNORMAL);
		this->SetForegroundWindow();
		Shell_NotifyIcon(NIM_DELETE, &nid); // 托盘图标不显示
	}
	if (lParam == WM_RBUTTONDOWN)
	{
		//右击弹出托盘菜单
		CMenu menu;
		menu.LoadMenu(IDR_MENU2);//首先建立菜单项IDR_MENU2
		CMenu *pPopUp = menu.GetSubMenu(0);
		CPoint pt;
		GetCursorPos(&pt);
		SetForegroundWindow();
		pPopUp->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
		PostMessage(WM_NULL, 0, 0);
	}
	return 0;
}
以上代码在VS2015中测试通过!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值