下面实现追加RTF 到 RichEdit 的功能
其本质是:EM_STREAMIN 消息,详细查看 MSDN
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- DWORD CALLBACK EditStreamCallback( DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb ) { DWORD result = 0x0000; try { *pcb = ((TStream*)dwCookie)->Read(pbBuff, cb); return result; } catch (Exception& ex) { result = 0xffff; return result; } } void RTFInsertStream(TRichEdit* richEdit,TStream* stream) { richEdit->Lines->BeginUpdate(); try { EDITSTREAM editStream = {0}; editStream.dwCookie = (DWORD)stream; editStream.dwError = 0x0000; editStream.pfnCallback = EditStreamCallback; richEdit->Perform(EM_STREAMIN, SFF_SELECTION | SF_RTF | SFF_PLAINRTF,LPARAM(&editStream)); richEdit->Lines->EndUpdate(); if (editStream.dwError != 0x0000) { throw Exception("RTFInsertStream: Error inserting stream"); } } catch (Exception& ex) { richEdit->Lines->EndUpdate(); throw Exception("RTFInsertStream: Error inserting stream"); } } __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // TMemoryStream* mmstream = new TMemoryStream(); RichEdit2->Lines->SaveToStream(mmstream); mmstream->Position = 0; RTFInsertStream(RichEdit1,mmstream); delete mmstream; mmstream = NULL; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
{
TStringStream* stringStream = new TStringStream("");
RichEdit2->Lines->SaveToStream(stringStream);
stringStream->Position = 0;
RTFInsertStream(RichEdit1,stringStream);
}
效果图
                    
                
                
            
        
浙公网安备 33010602011771号