2012-02-18 10 views
1

winapiのリシェットに構文強​​調を追加するコードを実現しようとしているので、色付けする必要があるテキスト範囲を検索しますが、EM_EXSETSELメッセージで範囲を選択するとEM_SETCHARFORMATメッセージで書式を設定すると、非常に遅く、すべてがユーザーに表示されます。文字の書式設定をより迅速に変更する方法は?範囲の文字書式を変更する

答えて

1

私はRTFでそれを行いました。概念的にHTMLに似たマークアップ言語です。一度にカラーディレクティブを挿入し、バッファをリロードします。私はMFCを使用していましたが、CRichEditはそれ以上の機能を追加しない薄層であると思います。ここでいくつかのコード(非常に古い、すみません):

.... 

// reformat line 
// 
void RichEditSyntaxColor::FmtLine(CRichEditCtrl &c, int nLine) 
{ 
    int iLine = c.LineIndex(nLine), 
     lLine = c.LineLength(iLine); 
    if (lLine > 0) 
    { 
     fmt(c, nLine, lLine); 

     long ss, es; 
     c.GetSel(ss, es); 
     c.ShowWindow(SW_HIDE); 
     stream(c, iLine, lLine); 
     c.ShowWindow(SW_SHOW); 
     c.SetSel(ss, es); 
    } 
} 

// apply formatted streaming to selected pos 
// 
void RichEditSyntaxColor::stream(CRichEditCtrl &c, int iLine, int lLine) 
{ 
    c.SetSel(iLine, iLine + lLine); 
    EDITSTREAM eds = { DWORD(this), 0, fmtLineCb }; 
    c.StreamIn(SF_RTF|SFF_SELECTION, eds); 
}  

// required callback 
// 
DWORD CALLBACK RichEditSyntaxColor::fmtLineCb(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) 
{ 
    RichEditSyntaxColor* pCookie = (RichEditSyntaxColor*)dwCookie; 
    memcpy(pbBuff, pCookie->obuf, *pcb = pCookie->os.pcount()); 
    return 0; 
} 

// colors data, useful to configure 
// 
SyntaxColor::aColor SyntaxColor::_colorsDef[] = { 
    {"Atom", RGB(16, 16, 32)}, 
    {"Number", RGB(128, 32,128)}, 
    {"Var", RGB(16, 16,255)}, 
    {"String", RGB(128,128,128)}, 
    {"Comment", RGB(128,128, 20)}, //RGB(32,128, 32)}, 
    {"SepChar", RGB(196, 32, 32)} 
}; 
char SyntaxColor::_colorsStr[]; 

void SyntaxColor::Table2String() 
{ 
    ostringstream s(_colorsStr);//, sizeof _colorsStr); 

    s << "{\\colortbl;"; 
    for (int i = 0; i < __maxTag__; i++) 
    { 
     COLORREF c = _colorsDef[i].value; 
     s << "\\red" << int(GetRValue(c)) 
      << "\\green" << int(GetGValue(c)) 
      << "\\blue" << int(GetBValue(c)) 
      << ';'; 
    } 
    s << '}' << ends; 
} 
... 
+0

私はあなたの方法で成功しました、ありがとう! – Triton

関連する問題