我正在用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.   

    个人认为,分割线和其他的菜单项比较如下:
    1、相同点:
       都是菜单项。
    2、不同点:
       分割线肯定是enable=false的,即是无效的。
       分割线上的“文字”显示为:“--------”样式。基于以上考虑,如果楼主已经实现了一般意义的菜单项,那么可以加上一个无效的、“-----”菜单项作为分割线。此外,你可以VB中进行程序设计时用的分割线大概也是这个样子的。
      

  2.   

    在VB中添加MF_SEPERATOR就是一个"-"(文本设置乘'_'),然后按照楼上的方法试试。2、不同点:
       分割线肯定是enable=false的,即是无效的。
      

  3.   

    多谢各位出谋划策。不过不论我怎么设,菜单始终是Enabled状态,M$也真是的,文档也不写写清楚,太没专业精神了。此外,分割线和disabled菜单项还是不同的。把鼠标移到分割线上没有高亮的。请各位再指点几招吧。
      

  4.   

    to:楼上
    enabled=false的菜单项移上去也是没有高亮的。(你可以用vb试一下)