首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

用CWnd实现菜单的逻辑遇到一个有关问题

2013-10-17 
用CWnd实现菜单的逻辑遇到一个问题觉得CWnd自绘任意形状稍微自由点,因此用CWnd模拟了菜单的逻辑现在遇到的

用CWnd实现菜单的逻辑遇到一个问题
觉得CWnd自绘任意形状稍微自由点,因此用CWnd模拟了菜单的逻辑
现在遇到的问题是当弹出窗口后,鼠标点到其他非菜单窗口以外的窗口时,菜单就应该隐藏或者
销毁,我是用SetCapture的方式,但是这有个缺点就是会影响点别的窗口的鼠标按下消息
而Windows的CMenu是不会影响的,就是比如我在菜单意外的地方点鼠标左键,那么CMenu就立即消失并且鼠标
左键在别的窗口这个动作仍然生效,而我用CWnd模拟的就做不到这个,可能说的有点啰嗦不知道大家明白了没。
就差这个其他都比较满意了。
[解决办法]
你的意思是当菜单弹出以后,点击窗口中其它地方,点击位置下得窗口无动作还是你的菜单没有隐藏/销毁?
[解决办法]
我觉得菜单还是用CMenu类比较好吧,CWnd弹出的窗口要麻烦一些吧
[解决办法]
如果你的菜单不是那么复杂的话,比如没有其它控件,那么菜单项的文字和背景可以用画上去的形式,这样菜单这个窗口没有其它控件的话,弹出窗口就SetCapture,点左键或者右键,判断点击的区域是不是在菜单上面,不是的话就ReleaseCapture并销毁菜单。

我也刚做了一个类似的,如果菜单上还有其它控件的话,暂时没想到好的方法。
[解决办法]
或者在 父窗口的::OnLButtonDown(UINT nFlags, CPoint point)中 检查: 
{
if (m_Menu.IsWindowVisible())
。。。。。 

热点排行