word嵌入vc时出现,保存的时候出现了些问题

  觉得这个帖子和现在做的东西有关联,于是把它保存一下。
楼主gongtou() 2006-03-14 21:02:07 在 VC/MFC / ATL/ActiveX/COM 提问

 
  我做了个东西把word嵌入mfc中,嵌入没有问题了,但是保存的时候出现的问题是:当打开(嵌入)多个word文档分别进行修改后,却只能保存第一次嵌入的哪个文档???以下是我的代码.对接口一点也不懂!谢谢!   程序是在网上找的代码做的.  
  //这个是得到IDispatch函数.      
  LPDISPATCH     CEmbed_WordCntrItem::GetIDispatch()          
  {          
                        ASSERT_VALID(this);          
                        ASSERT(m_lpObject     !=     NULL);          
                        LPUNKNOWN     lpUnk     =     m_lpObject;          
                        Run();          
                        LPOLELINK     lpOleLink     =     NULL;          
                        if(m_lpObject->QueryInterface(IID_IOleLink,(LPVOID     FAR*)&lpOleLink)==     NOERROR)          
                        {          
                        ASSERT(lpOleLink     !=     NULL);          
                        lpUnk     =     NULL;          
                        if(lpOleLink->GetBoundSource(&lpUnk)     !=     NOERROR)          
                        {          
                        TRACE0("Warning:     Link     is     not     connected!/n");          
                        lpOleLink->Release();          
                        }          
                        ASSERT(lpUnk     !=     NULL);          
                        }          
                        LPDISPATCH     lpDispatch     =     NULL;          
                        if(lpUnk->QueryInterface(IID_IDispatch,(LPVOID     FAR*)&lpDispatch)     !=     NOERROR)          
                        {          
                        TRACE0("Waring:     does     not     support     IDispatch!/n");          
                        return     NULL;          
                        }          
                        ASSERT(lpDispatch     !=     NULL);          
                        return     lpDispatch;              
  }          
  //这个是嵌入函数      
  void     CEmbed_WordView::EmbedAutomateWord1()     //可以直接打开的哪个东西      
  {          
                        BeginWaitCursor();      
                        CEmbed_WordCntrItem*     pItem     =     NULL;      
                        TRY      
                        {          
                                                CEmbed_WordDoc*     pDoc     =     GetDocument();      
                                                ASSERT_VALID(pDoc);      
                                                pItem     =     new     CEmbed_WordCntrItem(pDoc);      
                                                ASSERT_VALID(pItem);      
                                                CLSID     clsid;      
                                                if     (FAILED(::CLSIDFromProgID(L"Word.document",     &clsid)))      
                                                                        AfxThrowMemoryException();      
                                                if     (!pItem->CreateFromFile(m_sPath,     clsid))      
                                                                        AfxThrowMemoryException();      
                                                pItem->DoVerb(OLEIVERB_SHOW,     this);      
                                                m_pSelection     =     pItem;      
                                                pDoc->UpdateAllViews(NULL);      
                                                LPDISPATCH     lpDisp;      
                                                lpDisp     =     pItem->GetIDispatch();      
                        }      
                        CATCH(CException,     e)      
                        {      
                                                if     (pItem     !=     NULL)      
                                                {      
                                                                        ASSERT_VALID(pItem);      
                                                                        pItem->Delete();      
                                                }      
                                                AfxMessageBox(IDP_FAILED_TO_CREATE);          
                        }      
                        END_CATCH      
                        EndWaitCursor();      
  }      
  //这个是保存函数,      
  void     CEmbed_WordView::OnFileSave()          
  {      
  //     TODO:     Add     your     command     handler     code     here      
                        //     显示打开文件对话框      
                        CFileDialog     fileDlg(FALSE,     "*.doc",     "*.doc",     OFN_HIDEREADONLY         ¦     OFN_OVERWRITEPROMPT,     "Word文件(*.doc)     ¦*.doc     ¦     ¦",     NULL);      
                        if     (fileDlg.DoModal()     !=     IDOK)      
                                                return;      
                        CString     sPath     =     fileDlg.GetPathName();      
                        char     cPath[256];      
                        memset(cPath,     0,     sizeof(cPath));      
                        memcpy(cPath,     sPath,     sPath.GetLength());      
                        WCHAR     wPath[256];      
                        memset(wPath,     0,     sizeof(wPath));      
                        MultiByteToWideChar(CP_ACP,     MB_COMPOSITE,     cPath,     sPath.GetLength(),     wPath,     sizeof(wPath));      
                        IDispatch     *pOle     =     m_pSelection->GetIDispatch();      
                        if     (!pOle     )      
                                                return;     //     No     ole     document      
                        IPersistFile     *pPFile     =     NULL;      
                        pOle->QueryInterface(IID_IPersistFile,     (void**)&pPFile);      
                        if     (!pPFile)      
                        {      
                        //     不支持IPersistFile接口      
                                                if     (pOle)      
                                                                        pOle->Release();      
                                                if     (pPFile)      
                                                                        pPFile->Release();      
                        }      
                        else      
                                                pPFile->Save(wPath,     FALSE);      
  }       
      
 怎么样才能使它在打开多个word文档时,能够保存所有的文档而不是只能保存第一次嵌入的哪个?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值