这几天做了一个word插件,是按照徐景周的方法作的,鉴于个人水平,而且还不大了解ATL,出现了许多问题,希望大家指点。我做的插件是一个菜单条。1、做了插件,是为了执行某些操作,需要得到当前的word路径,不清楚如使用什么方法才能得到。2、word加载菜单后,在该word中打开新word,在新word中菜单条会失效,不清楚是什么原因。希望大家指点。

解决方案 »

  1.   

    你添加的是临时菜单,将temp参数置为VARIANT_FALSE即可
      

  2.   

    我改了还是不行。在注册表中总是由0000003变成000002
    STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
    {
    CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
    CComPtr < Office::_CommandBars> spCmdBars; 

    // Word应用接口_Application
    CComQIPtr<MSWord::_Application> spApp(Application);
    ATLASSERT(spApp);

    // 获取CommandBars接口
    HRESULT hr = spApp->get_CommandBars(&spCmdBars);
    if(FAILED(hr))
    return hr;
    ATLASSERT(spCmdBars);

    CComPtr <Office::CommandBar> spCmdBar;
    spCmdBars->get_ActiveMenuBar(&spCmdBar);

    CComPtr < Office::CommandBarControls> spBarControls;
    spCmdBar->get_Controls(&spBarControls);

    //MsoControlType::msoControlButton = 1
    CComVariant vToolBarType(10);//msoControlPopup
    //显示工具条
    CComVariant vShow(VARIANT_FALSE);
    CComPtr < Office::CommandBarControl> spNewBar; 
    spNewBar  = spBarControls->Add(vToolBarType, vEmpty, vEmpty, vEmpty, vShow); 

    //ATLASSERT(spNewBar);

    CComQIPtr < Office::CommandBarPopup> spCmdButton(spNewBar);
    //ATLASSERT(spCmdButton);

    spCmdButton->put_Caption(OLESTR("标题"));
    CComPtr < Office::CommandBarControls> spBarControls2;
    spCmdButton->get_Controls(&spBarControls2);

    CComPtr < Office::CommandBarControl> spNewBar21;
    spNewBar21 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow);
    CComQIPtr < Office::_CommandBarButton> spCmdButton21(spNewBar21);
    spCmdButton21->put_Caption(OLESTR("11111"));
    spCmdButton21->PutVisible(VARIANT_TRUE);

    CComPtr < Office::CommandBarControl> spNewBar22;
    spNewBar22 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow);
    CComQIPtr < Office::_CommandBarButton> spCmdButton22(spNewBar22);
    spCmdButton22->put_Caption(OLESTR("222222"));
    spCmdButton22->PutVisible(VARIANT_TRUE);

    m_spButton21 = spCmdButton21;
    m_spButton22 = spCmdButton22;

    hr = CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton21);
    if(FAILED(hr))
    return hr;

    hr = CommandButton2Events::DispEventAdvise((IDispatch*)m_spButton22);
    if(FAILED(hr))
    return hr;


    return E_NOTIMPL;
    }
    部分程序如下,其他的都是照着徐的做的,而且还是重新生成的。
      

  3.   

    如何在它的执行语句中使用CFileDialog dlg(FALSE,_T("doc"),NULL,NULL,"Word文档 (*.doc)|*.doc|");
    if(dlg.DoModal()==IDOK)
    这样的语句?(每次使用时总是报错)
      

  4.   

    得到Word路径:
     可以到注册表找 Hkeymachine..->sofeware->micro->win->... (App path  找这个就可以了.)
    有一个Word.exe的得到当前文件路径:
     MessageBox( NULL, m_spApp->GetActiveDocument()->FullName, "Name", MB_OK );
      

  5.   

    或者
    m_spApp->GetPath() + "Winword.exe"
      

  6.   

    qq联系了,msn上了。希望能给我发分代码。[email protected]  也可
      

  7.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    AfxEnableControlContainer();
    对话框的资源代码
      

  8.   

    等了一万年也没等到yellowwolf的代码。