MFC托盘实例

1.添加一个菜单资源,ID为IDR_MENU1
2.在Resource.h中添加 	#define IDN_NOTIFYICON1					3000
3.在CXXXDlg.h中添加		#define WM_NOTIFYICON						WM_USER + 5
4.在CXXXDlg.h中添加:
	protected:
		CMenu menu1;
	在CXXXDlg构造函数中添加:
	menu1.LoadMenu(IDR_MENU1);
5.添加消息映射
	ON_WM_DESTROY()
	ON_WM_CREATE()
	ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
6.添加private成员变量 NOTIFYICONDATA nd;
7.在CXXXDlg类中添加以下函数:
private:
void CTrayTestDlg::InitTray(UINT uCallbackMessage, TCHAR *szTip)
{
	nd.cbSize			= sizeof (NOTIFYICONDATA);
	nd.hWnd				= m_hWnd;
	nd.uID				= IDN_NOTIFYICON1;
	nd.uCallbackMessage	= uCallbackMessage;
	nd.hIcon			= m_hIcon;
	nd.uTimeout			= 2000;
	nd.dwState			= NIS_SHAREDICON;
	nd.dwStateMask		= 0;
	nd.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	lstrcpy(nd.szTip, szTip);
}
private:
BOOL CXXXDlg::ShowTray(BOOL bShow)
{
	return Shell_NotifyIcon(bShow ? NIM_ADD : NIM_DELETE, &nd);
}
private:
void CXXXDlg::MakeNotifyMessage(LPCTSTR lpText, LPCTSTR lpTitle, DWORD dwInfoFlags)
{
	nd.uFlags |= NIF_INFO;
	lstrcpy(nd.szInfo, lpText);
	lstrcpy(nd.szInfoTitle, lpTitle);
	nd.dwInfoFlags = dwInfoFlags;
	Shell_NotifyIcon(NIM_MODIFY, &nd);
	// Shell_NotifyIcon(NIM_SETFOCUS, &nd);
}
public:
LRESULT CXXXDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
	switch (wParam)
	{
	case IDN_NOTIFYICON1:
		switch (lParam)
		{
		case WM_LBUTTONDBLCLK:
			// TODO
			break;
		case WM_LBUTTONDOWN:
			// TODO
			break;
		case WM_RBUTTONDOWN:
			{
				CMenu *pPopupMenu = menu1.GetSubMenu(0);
				pPopupMenu->SetDefaultItem(ID_MENUITEM1, FALSE);
				if(IsWindowVisible())
					pPopupMenu->ModifyMenu(0, MF_BYPOSITION, ID_MENUITEM1, _T("隐藏主界面"));
				else
					pPopupMenu->ModifyMenu(0, MF_BYPOSITION, ID_MENUITEM1, _T("显示主界面"));
				//pPopupMenu->CheckMenuItem(ID_MENU_FULLSCREEN,MF_CHECKED|MF_BYCOMMAND);
				//pPopupMenu->CheckMenuItem(ID_MENU_FULLSCREEN,MF_UNCHECKED|MF_BYCOMMAND);
				CPoint point;
				GetCursorPos(&point);
				SetForegroundWindow();
				pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, AfxGetMainWnd(), 0); 
			}
			break;
		default:
			break;
		}
		break;
	default:
		break;
	}
	return 0;
}
8.在对话框OnCreate消息响应函数中添加
	InitTray(WM_NOTIFYICON, _T("my app"));
9.在对话框OnDestroy消息响应中添加
	ShowTray(FALSE);
10.在OnInitDialog中添加
	ShowTray();
	MakeNotifyMessage(_T("cvb"), _T("my title"), NIIF_INFO);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值