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);
MFC托盘实例
最新推荐文章于 2022-11-27 19:59:47 发布