如何让右键菜单自动消失? 我做了一个单文档应用程序,程序启动后就在 SYSTEM TRAY 添加一个图标,然后隐藏主窗口。在 SYSTEM TRAY 的右键消息处理中,弹出一个菜单。(主窗口一直隐藏) 问题是,这个右键菜单只有在我选择了其中一项时,才会消失,否则无论我点其他或桌面任何位置,这个菜单都不会消失,这不应该吧? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调用一下SetForegroundWindow(hWnd/*程序主窗口句柄*/);这是Windows的一个Bug,在MSDN中有提及. 在弹出菜单的前边加入SetForegroundWindow()函数就行:例:SetForegroundWindow();TrackPopupMenu(menu.m_hMenu,flag,p.x,p.y,0,m_hWnd,NULL); very easy!例如:void CMainFrame::OnListenMessage(WPARAM wParam,LPARAM lParam) { //The example of how to process the message! UINT uID;//发出该消息的图标的ID UINT uMouseMsg;//鼠标动作 POINT pt; //获得消息的ID uID=(UINT) wParam; //获得当前的消息 uMouseMsg=(UINT) lParam; if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键 { switch(uID) { case IDR_MAINFRAME://如果是我的图标 GetCursorPos(&pt);//取得鼠标位置 //虽然窗口不可见,但是可以在此激活 ::SetForegroundWindow( m_hWnd); CMenu menu; menu.LoadMenu(IDR_MENU_NEW); menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,pt.x,pt.y,this); //使窗口失去焦点 ::PostMessage( m_hWnd, WM_NULL, 0, 0 ); break; } } SetForegroundWindow();TrackPopupMenu (…………);PostMessage(WM_NULL, 0, 0);see http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q135788&我来了。 我用debug在程序上编译是可以用的,但是单独拿出来就会出错. 请问如何屏蔽窗口的关闭按钮,就是窗口上的那个红色叉 用WTL写一个MDI , 点击new菜单,会新建一个主窗体...................................解决立即送100分 在任务栏隐藏或出现后,如何得到消息? 如何判断点在椭圆内? 请问各位如何清空消息队列中已有的消息? 急切求救各位高手,如何将图形图形打印到文件中,打印之后是图像文件吗?? 关与list中鼠标点击选种问题 异步调用的问题 求助——如何实现半透明的窗体? 请高手指点:图像处理预览问题 CSplitterWnd m_wndSplitter
这是Windows的一个Bug,在MSDN中有提及.
例:
SetForegroundWindow();
TrackPopupMenu(menu.m_hMenu,flag,p.x,p.y,0,m_hWnd,NULL);
例如:
void CMainFrame::OnListenMessage(WPARAM wParam,LPARAM lParam)
{
//The example of how to process the message!
UINT uID;//发出该消息的图标的ID
UINT uMouseMsg;//鼠标动作
POINT pt;
//获得消息的ID
uID=(UINT) wParam;
//获得当前的消息
uMouseMsg=(UINT) lParam; if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
switch(uID)
{
case IDR_MAINFRAME://如果是我的图标
GetCursorPos(&pt);//取得鼠标位置
//虽然窗口不可见,但是可以在此激活
::SetForegroundWindow( m_hWnd);
CMenu menu;
menu.LoadMenu(IDR_MENU_NEW);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,pt.x,pt.y,this);
//使窗口失去焦点
::PostMessage( m_hWnd, WM_NULL, 0, 0 );
break;
}
}
TrackPopupMenu (…………);
PostMessage(WM_NULL, 0, 0);see http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q135788&
我来了。