1. 建立结构体的时候:
NOTIFYICONDATA m_notifyData; m_notifyData.cbSize = sizeof(NOTIFYICONDATA );
很多例子都是这么写 cbSize 的,但是一旦使用了 VS 2008 或者更高版本,你会发现这样的系统托盘图标在 XP 系统上无法弹出气泡提示,其实 cbSize 像下面这样赋值
m_notifyData.cbSize = NOTIFYICONDATA_V2_SIZE;
NOTIFYICONDATA_V2_SIZE 是 XP 可以接受的,当然这样做可能会丢失一些高级功能。
2. 处理点击托盘图标弹出菜单的时候:
不少例子是类似这样写的
LRESULT CDialupCppDlg::OnTrayMsg(WPARAM wParam, LPARAM lParam) { UINT uID = (UINT)wParam; UINT uMouseMsg = (UINT)lParam; CMenu menu; CMenu *pMenu; POINT pt; if(uMouseMsg == WM_RBUTTONDOWN || uMouseMsg == WM_LBUTTONDOWN) // 如果是单击左右键 { switch(uID) { case IDR_MAINFRAME: GetCursorPos(&pt); // 取得鼠标位置 //执行相应操作 menu.LoadMenu(IDR_MENU_POP); pMenu = menu.GetSubMenu(0); ASSERT(pMenu!=0); pMenu->TrackPopupMenu(0, pt.x, pt.y, this); break; } } return 0; }
你会发现弹出的菜单,点击其它空白位置的时候,它并不会消失
需要在 pMenu->TrackPopupMenu(0, pt.x, pt.y, this); 加一行
::SetForegroundWindow(m_hWnd); pMenu->TrackPopupMenu(0, pt.x, pt.y, this);
您的文章真的有深度吗??