添加OnTrayNotification()方法,然后加入响应代码就是了:LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam)
{
//Return quickly if its not for this tray icon
if (wParam != m_tnd.uID)
return 0L; CMenu menu, *pSubMenu;
CWnd* pTarget = AfxGetMainWnd(); // Clicking with right button brings up a context menu
if (LOWORD(lParam) == WM_RBUTTONUP)//右键放开
{
if (!menu.LoadMenu(m_tnd.uID)) return 0;
if (!(pSubMenu = menu.GetSubMenu(0))) return 0; // Make chosen menu item the default (bold font)
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos); // Display and track the popup menu
CPoint pos;
GetCursorPos(&pos); pTarget->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0,
pTarget->GetSafeHwnd(), NULL); // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"
pTarget->PostMessage(WM_NULL, 0, 0); menu.DestroyMenu();
}
else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) //左键双击
{
// double click received, the default action is to execute default menu item
pTarget->SetForegroundWindow(); UINT uItem;
if (m_DefaultMenuItemByPos)
{
if (!menu.LoadMenu(m_tnd.uID)) return 0;
if (!(pSubMenu = menu.GetSubMenu(0))) return 0;
uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID);
}
else
uItem = m_DefaultMenuItemID;
pTarget->SendMessage(WM_COMMAND, uItem, 0); menu.DestroyMenu();
} return 1;
}希望对你有帮助
{
//Return quickly if its not for this tray icon
if (wParam != m_tnd.uID)
return 0L; CMenu menu, *pSubMenu;
CWnd* pTarget = AfxGetMainWnd(); // Clicking with right button brings up a context menu
if (LOWORD(lParam) == WM_RBUTTONUP)//右键放开
{
if (!menu.LoadMenu(m_tnd.uID)) return 0;
if (!(pSubMenu = menu.GetSubMenu(0))) return 0; // Make chosen menu item the default (bold font)
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos); // Display and track the popup menu
CPoint pos;
GetCursorPos(&pos); pTarget->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0,
pTarget->GetSafeHwnd(), NULL); // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"
pTarget->PostMessage(WM_NULL, 0, 0); menu.DestroyMenu();
}
else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) //左键双击
{
// double click received, the default action is to execute default menu item
pTarget->SetForegroundWindow(); UINT uItem;
if (m_DefaultMenuItemByPos)
{
if (!menu.LoadMenu(m_tnd.uID)) return 0;
if (!(pSubMenu = menu.GetSubMenu(0))) return 0;
uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID);
}
else
uItem = m_DefaultMenuItemID;
pTarget->SendMessage(WM_COMMAND, uItem, 0); menu.DestroyMenu();
} return 1;
}希望对你有帮助
解决方案 »
- 为什么我的鼠标明明停了没动,怎么还会触发OnMouseMove()??
- MFC对话框通过wmi获取磁盘信息
- vc中如何改变Radio button控件的大小啊??
- 跪求: 谁能帮我解决这个中文问题啊!
- “money”的转换问题?
- 上海地区的高程考试结果什么时候公布?
- ????别看问题简单
- 如何搜索代码里面那段代码是函数?并且找到函数名后如何找到相关定义的.h文件呢
- 求助,关于数据处理流程的问题!
- 请问在vc程序如何调用外部程序?
- 一个很简单的问题:如何用VC调Delphi写的COM的接口
- socket API函数编程时,用的是阻塞套接字,当server端close时,client能得到通知么,怎么得到?
LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam)
{
if (wParam != m_tnd.uID)
return 0L;
CMenu menu, *pSubMenu; //建立菜单对象
CWnd* pTarget = AfxGetMainWnd(); if (LOWORD(lParam) == WM_RBUTTONCLK)//如果右键单击显示菜单
{
if (!menu.LoadMenu(m_tnd.uID)) return 0;
if (!(pSubMenu = menu.GetSubMenu(0))) return 0;
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos); CPoint pos;
GetCursorPos(&pos);
pTarget->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, pTarget->GetSafeHwnd(), NULL);
pTarget->PostMessage(WM_NULL, 0, 0);
menu.DestroyMenu();
} return 1;
}
你可以先在资源编辑器里做一个菜单,也可以动态生成菜单.希望对你有帮助