1,如何获取当前打开文档的名字或路径?
2,如何取消自己添加的目录菜单(像“文件”那种菜单)的事件订阅(DispEventUnadvise)?

解决方案 »

  1.   

    1.
    _Application->get_ActiveDocument()->GetFullName()
    就可以得到当前打开文档的全路径.
    2.
    不是很明白你的意思.
      

  2.   

    1.
    CComPtr<Word::_Document> pDoc;
    hr = m_spApp->get_ActiveDocument(&pDoc);

    if (pDoc != NULL)
    {
    CComBSTR bstrName;
    pDoc->get_FullName(&bstrName);

    USES_CONVERSION;
    MessageBox(NULL, W2CT(bstrName), _T("当前文档"), MB_OK);
    }我用上面的代码,放在OnConnection中行不?插件正常启动了,可是为什么没弹出提示呢?
    2.是这样的,我在菜单工具栏上添加了一个菜单,如何在OnDisconnection中删除呢?我现在是每启动一次WORD就会多出一个插件生成的菜单。
      

  3.   

    刚才发现自己写的第一个问题的代码是没问题的,主要是要确定啥时候是文档打开完毕,放在OnConnection好像一直pDoc都为空,那啥时调用上面的代码才好呢?
      

  4.   

    刚才发现自己写的第一个问题的代码是没问题的,主要是要确定啥时候是文档打开完毕,放在OnConnection好像一直pDoc都为空,那啥时调用上面的代码才好呢?
      

  5.   

    1、响应_Application的DocumentChange事件,此时才能得到ActiveDocument。
    2、调用AtlUnadvise即可
      

  6.   

    james,那个取消菜单订阅能稍微说得清楚一点不?其实我在网上找了一阵,发现vb中用Delete方法就行,感觉那个方法也能用在atl中,我试了一下,结果报个非正常退出的错误,atl写word插件的资料实在是少,找来找去网上也就那么两篇相关的教程。
      

  7.   

    在Delete之前必须先unadvise假设你的组件是按照下面的继承方式来实现按钮点击响应的:
    class ATL_NO_VTABLE CYourCom :
      public ...,
      public IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>那么你应该用下面的方式来取消事件通知:
    IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>::DispEventUnadvise(m_spButton);
      

  8.   

    按钮的,我按教程上的都能实现,可是菜单的我查来查去就是不知道如何才能消掉。
    我添加菜单的代码:
    CComVariant vType(msoControlPopup);
            CComVariant vPos(4);   
            CComVariant vTemp(VARIANT_FALSE);    
            CComVariant vMenuEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); 
       
    IDispatchPtr spDip;
            spDip = spCmdCtrls->Add(vType, vMenuEmpty, vMenuEmpty, vPos, vTemp); 

    //spCmdPopup指向弹出菜单
            CComQIPtr<Office::CommandBarPopup> spCmdPopup(spDip);
    m_spMenu = spCmdPopup; _bstr_t  bstrSecureView(OLESTR("NEW MENU"));
            spCmdPopup->put_Caption(bstrSecureView); 
    其中的m_spMenu是成员变量:
    CComPtr<Office::CommandBarPopup> m_spMenu;在OnDisconnection中该如何处理m_spMenu呢?
      

  9.   

    在office中,工具栏按钮跟菜单没什么两样,完全是同一个东西(_CommandBarControl),区别仅在于创建的时候你把它放到菜单还是工具栏。