look for answers here:Rich Edit Control
http://www.codeguru.com/richedit/index.shtml

解决方案 »

  1.   

    去看过,下载了几呼所有有源程序,也没有找到一个可以在CRichEditCtrl中(不是CRichEditView)可以插入图片的,或是指定栏宽可自动换行的。
      

  2.   

    到这看看呀。
    http://www.copathway.com/vchelp/type.asp?class_id=1&type_id=12
      

  3.   

    用CRichEditCtrl::Create中的参数dwStyle可以设置折行
      

  4.   

    To: papaya_stone(^_^)shentong(^_^) 你说的地方我也看过,没有我想要的内容.
    如果还是没人知道的话,换个问题算了.
      

  5.   

    谁有ZIP或是RAR格式的压缩类源程序,比如对内存中的一段数据压缩或解压缩.(100分)
      

  6.   

    [email protected] 收到就给100分
      

  7.   

    用“Insert ActiveX Control”的“Microsoft Rich TextBox Control 6.0”
    就可以解决,不过离题了,呵哈哈。

     m_RichTextCtrl.SetFileName("D:\\gg.rtf")
     m_RichTextCtrl.Refresh();
    另外,CRichEditCtrl的折行问题try:
    Styles中选MultiLine项及Want return项
      

  8.   

    谁有ZIP或是RAR格式的压缩类源程序,比如对内存中的一段数据压缩或解压缩.(100分)
    [email protected] 收到就给100分
      

  9.   

    To: richuen22(令狐龟) 我要是从输入流中载入RTF格式文本,而不是从文件中
    另外折行问题,我已加入了这些风格,还是不能自动换行
      

  10.   

    look intoCompression FAQ 
    http://www.faqs.org/faqs/compression-faq/
      

  11.   

    先解决这个折行问题:
    参照MSDN2001:
    对话框程序
    CXXXDlg::OnInitDialog()
    {
        .
        .
        .
    // TODO: Add extra initialization here
             CFile file;
    file.Open("D:\\kk.rtf",CFile::modeRead,0);
    EDITSTREAM es;
    es.dwCookie=(DWORD) &file;
    es.dwError=0;
    es.pfnCallback=MyStreamInCallback;
    m_Rich.StreamIn(SF_RTF  ,es);
             return TRUE;  // return TRUE  unless you set the focus to a control}
    在CXXXDlg.h中
    加入声明
    static DWORD CALLBACK 
         MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb,
    LONG *pcb);在刚才的CXXXDlg.CPP中加入
    DWORD CXXXDlg::MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
    {
    CFile* pFile = (CFile*) dwCookie;   *pcb = pFile->Read(pbBuff, cb);   return 0;
    }CRichEditCtrl的Styles中选MultiLine项,不用选Want return项
    至于加入图片这项,研究中寻找资料中.....
      

  12.   

    忘了一句:我用的是Word97,VC+SP4,WinMe。
      

  13.   

    To:richuen22(令狐龟) 谢谢你,我使用的就是这种方法载入RTF文件,无法自动换行,我的是VC6+Win98
      

  14.   

    你是不是在Style下选了Auto VScroll项及Auto HScroll项,若有请去掉。
    第二个问题,在一些程序员资源2001的"D"版可以看到有ZIP的源代码。
      

  15.   

    载入图片的问题,要用到COM的知识,由于我暂未对COM有接触,给这一篇文章你看,但不知行不行:
    Here is a way to put a bitmap file into an RTF control. It will insert the file, pWorkSpace->GetWkspTempDirectory() + _T("\\") + plotName, into the CRichEditCtrl m_reportCtrl: This goes in the ".h" file:        LPSTORAGE m_lpStorage;  // provides storage for m_lpObject
            LPLOCKBYTES m_lpLockBytes;  // part of implementation of m_lpStorage
            LPOLEOBJECT m_lpObject; // in case you want direct access to the OLE object
            LPVIEWOBJECT2 m_lpViewObject;// IViewObject for IOleObject above
    The rest of this goes in the ".cpp" file: 
    LPUNKNOWN AFXAPI _AfxQueryInterface(LPUNKNOWN lpUnknown, REFIID iid)
    {
            ASSERT(lpUnknown != NULL);        LPUNKNOWN lpW = NULL;
            if (lpUnknown->QueryInterface(iid, (LPLP)&lpW) != S_OK)
                    return NULL;        return lpW;
    }void CSimulationReportView::InsertPlotBitmap()
    {
            USES_CONVERSION;
            SCODE sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &m_lpLockBytes);
            if (sc != S_OK)
                    AfxThrowOleException(sc);
            ASSERT(m_lpLockBytes != NULL);        sc = ::StgCreateDocfileOnILockBytes(m_lpLockBytes,
                    STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &m_lpStorage);
            if (sc != S_OK)
            {
                    VERIFY(m_lpLockBytes->Release() == 0);
                    m_lpLockBytes = NULL;
                    AfxThrowOleException(sc);
            }        CWorkSpace * pWorkSpace = GetDocument()->GetWorkSpace();
        if ( !pWorkSpace )
          return;
            CString plotName;
            plotName.LoadString( IDS_PLOT_FILENAME );
        CString szFileName( pWorkSpace->GetWkspTempDirectory() + 
                                                    _T("\\") + plotName );        // attempt to create the object
            sc = ::OleCreateFromFile(CLSID_NULL, T2COLE(szFileName),
                                                             IID_IUnknown, OLERENDER_DRAW, NULL, NULL, 
                                                             m_lpStorage, (void **)&m_lpObject);
            if ( sc != S_OK )
            {
                    TCHAR * lpMsgBuf;
                    ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                                                     FORMAT_MESSAGE_FROM_SYSTEM, NULL, 
                                                     ::GetLastError(),
                                                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                                                     (LPTSTR) &lpMsgBuf, 0, NULL );
                    CString msg( lpMsgBuf );
                    msg += _T("\n\n\nThe following file, created in\n"
                                      "Simulation->Plot, may be missing due\n"
                                      "to not doing a File->Save Workspace:\n\n" );
                    msg += szFileName;
                    AfxMessageBox( msg, MB_OK );
                    ::LocalFree( lpMsgBuf );
                    return;
            }
            
            // m_lpObject is currently an IUnknown, convert to IOleObject
            if (m_lpObject != NULL)
            {
                    LPUNKNOWN lpUnk = m_lpObject;
                    m_lpObject = QUERYINTERFACE(lpUnk, IOleObject);
                    lpUnk->Release();
                    if (m_lpObject == NULL)
                            AfxThrowOleException(E_OUTOFMEMORY);
            }        // cache the IViewObject interface
            m_lpViewObject = QUERYINTERFACE(m_lpObject, IViewObject2);
            if (m_lpViewObject == NULL)
                    return;        // setup for advises; we assume that OLE cleans them up properly
            LPADVISESINK lpAdviseSink =
                    (LPADVISESINK)GetInterface(&IID_IAdviseSink);        // set up view advise
            VERIFY(m_lpViewObject->SetAdvise(DVASPECT_CONTENT, 0, lpAdviseSink)
                    == S_OK);        // the server shows these in its user-interface
            //  (as document title and in File Exit menu)
            m_lpObject->SetHostNames(T2COLE(AfxGetAppName()),
                    T2COLE(GetDocument()->GetTitle()));        // all items are "contained" -- this makes our reference to this object
            //  weak -- which is needed for links to embedding silent update.
            OleSetContainedObject(m_lpObject, TRUE);        CHARRANGE cr;
            m_reportCtrl.GetSel( cr );
            cr.cpMin = cr.cpMax -1;
            m_reportCtrl.SetSel( cr );        REOBJECT reo;
            memset( &reo, 0, sizeof( reo ) );
            reo.cbStruct = sizeof( reo );
            CLSID classID;
            if ( m_lpObject->GetUserClassID( &classID ) != S_OK)
                    classID = CLSID_NULL;
            reo.clsid = classID;
            reo.cp = REO_CP_SELECTION;
            reo.poleobj = m_lpObject;
            reo.pstg = m_lpStorage;
            LPOLECLIENTSITE lpClientSite;
            m_reportCtrl.GetIRichEditOle()->GetClientSite( &lpClientSite );
            reo.polesite = lpClientSite;
            SIZEL sizel;
            sizel.cx = sizel.cy = 0; // let richedit determine initial size
            reo.sizel = sizel;
            reo.dvaspect = DVASPECT_CONTENT;
            reo.dwFlags = REO_RESIZABLE;
            reo.dwUser = 0;
            HRESULT hr = m_reportCtrl.GetIRichEditOle()->InsertObject(&reo);
    }