您可以通過豐富的編輯顯示錶格和邊框。下面會顯示一個方塊,固體邊界:
str = L"{\\rtf1\
\\trowd\\trgaph72 \
\\clbrdrt\\brdrdot\\clbrdrl\\brdrdot\\clbrdrb\\brdrdot\\clbrdrr\\brdrdot \
\\cellx3000 TEXT\\intbl\\cell \
\\row\\pard\\par\
}";
如果您在Microsoft Word中運行這個它會顯示虛線喜歡它應該。 RichEdit不處理像它應該的虛線邊框,或者它可能期待着不同的格式。如果您從Word保存該文件,它仍然不顯示虛線。
如果您不需要虛線然後使用這些簡單的例子來說明箱RichEdit中:
CString str;
str = L"{\\rtf1\
\\trowd\\trgaph72 \
\\cellx3000 TEXT\\intbl\\cell \
\\row\\pard\\par\
}";
str = L"\
{\\rtf1\\ansi\\deff0\
\\trowd\
\\cellx1000\
\\cellx2000\
\\cellx3000\
\\ TEXT1\\cell\
\\ TEXT2\\cell\
\\ TEXT3\\cell\
\\row\
}";
參見link
注意,CRichEditCtrl::SetWindowText
就叫::SetWindowText
WinAPI的,它將設置字符串爲純文本。
使用CRichEdit::StreamIn
設置原始rtf字符串。在你的情況下,你可能使用自己的類,它會覆蓋CRichEditCtrl::SetWindowText
並運行必要的流。
請嘗試以下解決Word中的拼寫檢查RichEdit中獲得RTF格式字符串:
DWORD __stdcall rtfstreamget(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CStringA text;
text.GetBufferSetLength(cb);
CStringA *ptr = (CStringA*)dwCookie;
for(int i = 0; i < cb; i++)
text.SetAt(i, *(pbBuff + i));
*ptr += text;
*pcb = text.GetLength();
text.ReleaseBuffer();
return 0;
}
bool GetRTF(hWnd, CString &sW)
{
CStringA sA;
EDITSTREAM es{ 0 };
es.dwCookie = (DWORD_PTR)&sA;
es.pfnCallback = rtfstreamget;
edit.StreamOut((CP_UTF8 << 16) | SF_USECODEPAGE | SF_RTF, es);
SendMessage(hWnd, EM_STREAMOUT,
(CP_UTF8 << 16) | SF_USECODEPAGE | SF_RTF, (LPARAM)&es);
sW = CA2W(sA, CP_UTF8);
return es.dwError == 0;
}
CStringW s;
GetRTF(msword_spellcheck_hwindow, str);
'm_reText.SetWindowText(strRtfText);'將無法工作。它將只顯示文本,如同「{\ rtf1 \ box \ ...」。您已通過編輯流加載rtf文本。它仍然不會顯示像這些邊界的一些功能。 Microsoft Word使用不同的引擎,這就是爲什麼它可以顯示它。我想在RTF中你可以顯示錶格,我不記得了。您可能會考慮使用HTML控件,但這可能會遇到其他問題。 –
非常感謝您的回答。對我來說,通過SetWindowText加載工作正常,控件顯示的格式與寫字板一樣多,包括表格。但是豁免那些邊界( – vtrz
「Microsoft Word使用不同的引擎」 如果是這樣,它爲什麼加載RichEdit20W,如MSWord 2010中的spy ++ for拼寫檢查對話框所示(此框*顯示*文本週圍的邊框)? – vtrz