描述:
我正在用ATL写一个ActiveX控件。VB程序员在使用时(design-time),用鼠标右击控件会弹出一个上下文菜单,上面有Cut, Copy, Paste, Delete等等。我在这个菜单上加上自己的菜单项,可以调用自己的代码。现在的问题是我没有办法在上面加入分割线(separator)。我在MSDN上查了很久,相关的资料很少,但从零星的几篇文章里看出应该是可以实现的,但是就是试不出来。
我现在的做法是这样的,在注册表里该控件CLSID下加入verb项。覆盖IOleObject::DoVerb函数,写自己的代码。
按http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/reg_74rm.asp
所说,注册表中verb string后的第一个参数将被AppendItem函数作为参数调用(没说是哪个参数,我通过在程序中用IOleObject::EnumVerbs验证,发现是uFlags参数)。于是我就将它设为2048(MF_SEPERATOR),可是结果还是和普通菜单项一样。
哪位高手能够帮我帮我看看,给出正解和正确思路的都给分。先在此谢过了。
MSDN上的相关资料链接:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;275862
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/reg_74rm.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/oin_ol2t_4eb7.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ost_a2z_63qa.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedcom/html/cerefclsidkey.asp
解决方案1:
在VB中添加MF_SEPERATOR就是一个"-"(文本设置乘'_'),然后按照楼上的方法试试。
2、不同点:
分割线肯定是enable=false的,即是无效的。
个人认为,分割线和其他的菜单项比较如下:
1、相同点:
都是菜单项。
2、不同点:
分割线肯定是enable=false的,即是无效的。
分割线上的“文字”显示为:“--------”样式。
基于以上考虑,如果楼主已经实现了一般意义的菜单项,那么可以加上一个无效的、“-----”菜单项作为分割线。
此外,你可以VB中进行程序设计时用的分割线大概也是这个样子的。