读书人

如何在弹出菜单上再用鼠标右键弹出菜单

发布时间: 2013-12-13 00:50:19 作者: rapoo

怎么在弹出菜单上再用鼠标右键弹出菜单
现在会有错误码 1446 ERROR_POPUP_ALREADY_ACTIVE

在主菜单中的菜单项中点击鼠标右键, 在这个事件中想使用TrackPopupMenu弹出一个右键菜单, 对当前选中的菜单项进行编辑.
这时TrackPopupMenu返回FALSE并且错误码是1446, 怎么解决呢?

按这个错误码的意思, 是说弹也菜单已经激活, 我想是不是菜单已经在以前弹出来了. 所以就动态创建一个菜单来弹出, 结果错误一样.

百度google中, 不过暂时还没有找到解决方案.

谢谢
[解决办法]


CMenu menu;

menu.CreatePopupMenu();

menu.AppendMenu(MF_STRING,WM_REFLASH,"刷新");

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);

HMENU hmenu = menu.Detach();

menu.DestroyMenu();

在菜单的响应区域 执行上段代码??
[解决办法]
传进的this窗口指针,你得保证右键的时候,菜单这个窗口还在...
[解决办法]
修改菜单项的UI参考Office 2003的“工具、自定义……”功能。

这个里面可能有现成的例子代码:
Codejock.Xtreme.Suite.Pro.ActiveX
[解决办法]
把菜单弄成动态的,有意思...

楼主弄出来了 给我个demo? 呵呵
[解决办法]
这个估计只能用自定义菜单,不能用系统菜单
[解决办法]
用SoftSnoop软件和Spy++软件监视实现了此功能的软件在实现此功能的过程中调用过哪些API和收发过哪些消息。
[解决办法]
我认为这不是一个好的设计?
[解决办法]
这是不现实的吧
系统的菜单同一时间只能有一个菜单窗口显示
除非你的菜单是你自己做的窗口

其实你看看错误返回的字面意思也应该大致明白了
内容就是说已经有一个弹出菜单被激活了,不能再弹出另外一个
[解决办法]
菜单的弹出是排他的,除非是父菜单自动弹出子菜单,如果确信要实现这样的功能LZ可以使用若干个子窗口来模拟菜单
[解决办法]
创建一个窗口做容器,把目标菜单绘制到这个窗口上,然后右键的时候传递这个窗口句柄

相当于VS菜单资源编辑器的功能

读书人网 >VC/MFC

热点推荐