VC雕虫小技:关于弹出菜单

138 views 十二月 04, 06 by Timothy

在用VC做一些软件功能的时候,为了方便使用,通常会涉及到托盘编程。也就是在程序最小化的时候,会在右下角的托盘区域添加一个图标,这个图标通常会支持弹出菜单功能。问题就在这里出现了,你也许会发现我们使用TrackPopupMenu呼出的弹出菜单,如果用户在取消选择的时候,在桌面任意地方单击,这个菜单也不会消失,很是郁闷,通常让初学者感到万念俱灰~~。
托盘程序中调用弹出菜单示例代码如下:

if(message==WM_SHELL_NOTIFY && lParam==WM_RBUTTONDOWN)
{
CPoint pt;
GetCursorPos(&pt);
CMenu *pMenu,menu;
menu.LoadMenu(IDR_SYSMENU);
pMenu=menu.GetSubMenu(0);
pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this,0);
}

要解决这个问题,其实比较简单,在响应托盘消息以及鼠标右击消息的时候,需要我们先调用一个函数,在你弹出菜单之前,设置你的窗口为最前窗口,问题就会迎刃而解。
修改后的代码如下:
if(message==WM_SHELL_NOTIFY && lParam==WM_RBUTTONDOWN)
{
this->SetForegroundWindow(); //这里将主窗口设置为最前端窗口
CPoint pt;
GetCursorPos(&pt);
CMenu *pMenu,menu;
menu.LoadMenu(IDR_SYSMENU);
pMenu=menu.GetSubMenu(0);
pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this,0);
}

编译后,再看看效果,问题就这样解决了。

分享到:

声明: 此Blog中的文章和随笔仅代表作者在某一特定时间内的观点和结论,对其完全的正确不做任何担保或假设
本站文章均采用 知识共享署名-相同方式共享3.0 协议进行授权,除非注明,本站文章均为原创,转载请注明转自 Timothy's Space 并应以链接形式标明本文地址!

你可能也对下列文章感兴趣

  • 没有相关文章!

Add your comment

1 Responses to "VC雕虫小技:关于弹出菜单"


Leave a Reply

 您已输入0

(Ctrl+Enter)