ATL默认的实现的控件在VB中只能通过属性列表中的Custom来打开属性对话框我想要实现可在菜单中打开的功能,怎么做?在线等,解决立即给分

解决方案 »

  1.   

    附带说一句,用MFC做的控件默认就可以实现在菜单中打开属性对话框
      

  2.   

    属性页很简单,它也是一个组件,并且只需要暴露一个关键接口IPropertyPage。
    如果要把属性页加到某一个控件,这个控件必须暴露一个接口ISpecifyPropertyPages,在它的GetPages()返回的CAUUID结构中包含你需要指定的属性页的CLSID就可以。
    如果用ATL更简单,只需要用向导添加一个属性页,然后在控件的BEGIN_PROPERTY_MAP块中加入PROP_PAGE(属性页的CLSID)就可以。
      

  3.   

    那我明白你意思了,这是IOleVObject::DoVerb, IOleObject::EnumVerbs实现的,你可以参考CCmdTarget::DoOleVerb(), CmdTarget::EnumOleVerbs()。
      

  4.   

    ATL支持用注册表实现IEnumVerb(),方法在
    {Youre CLSID}
    {
       'Verb'
       {
          '0' = s '&Properties, 0, 2'
       }
    }
    子键名以及值分别表示typedef struct tagOLEVERB { LONG iVerb; LPOLESTR lpszVerbName; DWORD fuFlags; DWORD grfAttribs; } OLEVERB; 的四个值。
      

  5.   

    我来说一个偏方,虽然vb下面不能打开属性页,但是属性还是可以修改的。
    你可以在vb下面随便打开一个控件的属性,比如选中form按f9。然后再选择你插入的控件,就可以修改属性了。
    当然如果你需要自定义属性页,还要参考上面arxing(阿行) 的方法。
      

  6.   

    arxing(阿行) 
    谢谢,我来试试看whell(平凡人生) 
    我不是只在VB里面用,而要插入到WPS中,所以才一定要有右键菜单项