+ -
当前位置:首页 → 问答吧 → 关于COleDocObjectItem的问题

关于COleDocObjectItem的问题

时间:2011-12-01

来源:互联网

目前在做一个vc++显示并操作word的小程序,遇到了问题:从文件创建ole时无法固定打开文件的程序。
如果一种文件类型可以多种程序打开,会选择用户设置的程序插入。比如:安装了wps的用户默认使用wps打开word文件,插入时就是wps的界面,而开发程序操作文件的函数全部是word的,就无法使用word相关的函数来操作word文件了,请各位大侠指教。
代码如下:
C/C++ code
    CLiteratrueMakerDoc* pDoc = GetDocument();   
        ASSERT_VALID(pDoc);   
        pItem = new CLiteratrueMakerCntrItem(pDoc);   
        ASSERT_VALID(pItem);    
        CLSID clsid; //  
        if(FAILED(::CLSIDFromProgID(L"WORD.document",&clsid)))    
            AfxThrowMemoryException();
        CFileDialog fDlg(TRUE,_T("所有WORD文档"),NULL,OFN_HIDEREADONLY,_T("所有WOR文档(*.docx;*.docm;*.dotx;*.dotm;*.doc;*.dot;*.rtf;*.htm;*.html;*.mht;*.mhtml;*.xml)|*.docx;*.docm;*.dotx;*.dotm;*.doc;*.dot;*.rtf;*.htm;*.html;*.mht;*.mhtml;*.xml||"));
        if(fDlg.DoModal() == IDOK)
        {
            CString    StrOPenFile=fDlg.GetFileName();
            if(!pItem->CreateFromFile(StrOPenFile))   
                AfxThrowMemoryException();    
        }
        else
        {
            if(!pItem->CreateNewItem(clsid))   
                AfxThrowMemoryException();        
        }
    
        ASSERT_VALID(pItem);       
        pItem->Activate (OLEIVERB_INPLACEACTIVATE,this);       
        pItem->SetItemRects();          
        ASSERT_VALID(pItem);   
        m_pSelection = pItem;   // set selection to last inserted item   
        pDoc->UpdateAllViews(NULL); 

作者: NET_SPY_SHI   发布时间: 2011-12-01

修改注册表,修改文件关联的程序
或者就是定制一个自己的CFileDialog,当点击打开文件时就用createprocess等用word来打开文件

作者: fishion   发布时间: 2011-12-01

引用 1 楼 fishion 的回复:

修改注册表,修改文件关联的程序
或者就是定制一个自己的CFileDialog,当点击打开文件时就用createprocess等用word来打开文件



谢谢,第一种方法在做,但是总觉得这样做不是很合适,会修改用户的使用习惯。

能不能把第二种方法的消息些!

作者: NET_SPY_SHI   发布时间: 2011-12-01

能不能把第二种方法说得详细些。

还有就多次插入后怎么删除?
目前插入后删除并没有使得文件的大小减少,而且打开后插入再删除文件会继续增大

作者: NET_SPY_SHI   发布时间: 2011-12-01

自己顶呀顶,别沉呀

作者: NET_SPY_SHI   发布时间: 2011-12-07