我已经将弹出菜单的CRect置零了,
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this,NULL);
但还是弹出后,点菜单以外不隐藏,请教高手怎么办
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this,NULL);
但还是弹出后,点菜单以外不隐藏,请教高手怎么办
问题是现在在托盘点击后就不隐藏,具体的托盘右键响应代码如下:
case WM_RBUTTONUP:
GetCursorPos(lpoint);//得到鼠标位置
menu.LoadMenu(IDR_MENU2);
pSubMenu=menu.GetSubMenu(0);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this,NULL);
//menu.DestroyMenu();
break;
==================
你这段代码是写在什么地方的?也就是说this指向哪个类的?
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,pWndPopupOwner ,NULL);
case WM_RBUTTONUP:
{
POINT point;
::GetCursorPos(&point);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, ID_CONFIG, _T("配置"));
menu.AppendMenu(MF_STRING, ID_ABOUT, _T("关于中心服务器"));
menu.AppendMenu(MF_SEPARATOR, 0, _T(""));
menu.AppendMenu(MF_STRING, ID_CLOSE, _T("退出"));
menu.SetDefaultItem(ID_CONFIG);
SetForegroundWindow(); //加上这一句就可以了
menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
menu.Detach();
menu.DestroyMenu();
}
break;
case WM_RBUTTONUP:
{
POINT point;
::GetCursorPos(&point);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, ID_CONFIG, _T("配置"));
menu.AppendMenu(MF_STRING, ID_ABOUT, _T("关于VStar中心服务器"));
menu.AppendMenu(MF_SEPARATOR, 0, _T(""));
menu.AppendMenu(MF_STRING, ID_CLOSE, _T("退出"));
menu.SetDefaultItem(ID_CONFIG);
SetForegroundWindow(); //加上这一句就可以了
menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
menu.Detach();
menu.DestroyMenu();
}
break;
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wParam!=IDR_MAINFRAME)
return 1;
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
CMenu menu,*pSubMenu;
long nSelection;
LPPOINT lpoint=new tagPOINT;
if(!trayStart){
switch( lParam){
case WM_RBUTTONUP:
GetCursorPos(lpoint);//得到鼠标位置
menu.LoadMenu(IDR_MENU2);
pSubMenu=menu.GetSubMenu(0);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this,NULL);
SetForegroundWindow();
menu.Detach();
menu.DestroyMenu();
break;
case WM_LBUTTONDOWN:
ShowWindow(SW_SHOW);
cur->ShowWindow(SW_SHOW);
Shell_NotifyIcon(NIM_DELETE,&nid);
break;
}
}
delete lpoint;
return 0;
}
这是对话框响应托盘消息的回调函数,
刚才加了SetForegroundWindow(); 还是不能自动消失,
而且点开别的托盘程序的右键弹出菜单也无法自动消失
但是为什么不是托盘的地方,不加SetForegroundWindow(),右键弹出也会消失,而在托盘就得加这句才能消失?