リッチエディットで表や罫線を表示できます。以下は、実線の境界線を持つボックスを示しています。
str = L"{\\rtf1\
\\trowd\\trgaph72 \
\\clbrdrt\\brdrdot\\clbrdrl\\brdrdot\\clbrdrb\\brdrdot\\clbrdrr\\brdrdot \
\\cellx3000 TEXT\\intbl\\cell \
\\row\\pard\\par\
}";
これを Microsoft Word で実行すると、想定どおりに点線が表示されます。RichEdit は、想定されているように点線の境界線を処理しないか、別の形式を想定している可能性があります。Word からファイルを保存しても、点線は表示されません。
点線が必要ない場合は、次の簡単な例を使用してリッチエディットでボックスを表示します。
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\
}";
リンクも参照
CRichEditCtrl::SetWindowText
単純に WinAPI を呼び出し::SetWindowText
、文字列をプレーン テキストとして設定することに注意してください。
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);