VC SDK 托盘编程 问题?

来源:百度知道 编辑:UC知道 时间:2024/05/26 18:18:22
托盘显示图标已经实现,托盘图标的左右击事件也捕获到,还有两个问题:
1.左击托盘显示主窗口,怎么让它显示在最上面,ShowWindow(hWnd,SW_NORMAL)不管用
2.右击托盘图标显示一个菜单,这个菜单怎么做?我写一个菜单资源脚本,可是不知道怎么用上?
1楼答非所问
2楼没找到想要的东西

我来答吧。
1.像任务管理器那样一直在最上面,不会被别的窗口挡住。实现这个功能只需在OnInitDialog里调用CDialog类的一句话:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
要还原原来的状态,也是一句话:
SetWindowPos(&wndNoTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

2. 存一个CMenu* m_pMenu;类型的成员变量,在构造函数里这样:
CMenu menu;
menu.LoadMenu(IDR_MENU);
m_pMenu=menu.GetSubMenu(0);
//m_pMenu is the file menu in menu resource
HMENU hmenu=menu.Detach();
menu.DestroyMenu();

IDR_MENU是你的菜单资源,右击托盘图标的时候
//get the mouse position
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);

//pop up the menu and when click other place, the menu will disappear
SetForegroundWindow();
m_pMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
PostMessage(WM_NULL,0,0);

delete lpoint;

需要填写下面的结构,下面的代码是从我的一段程序里面摘录的:
{
NOTIFYICONDATA pnid;
pnid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
pnid.hWnd =