リッチエディットで表や枠線を表示できます。以下は、固体の境界線とのボックスが表示されます:
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\
}";
も参照してくださいlink
注意、CRichEditCtrl::SetWindowText
は、単に::SetWindowText
WinAPIのを呼び出します、それが設定されます文字列をプレーンテキストとして返します。
CRichEdit::StreamIn
を使用して、未処理のrtf文字列を設定します。あなたの場合、おそらくCRichEditCtrl::SetWindowText
を上書きし、必要なストリーミングを実行する独自のクラスを使用しています。
Wordのスペルチェックリッチエディットから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は別のエンジンを使用しています」 MSWord 2010のspy ++のスペルチェックダイアログボックスで示されているようにRichEdit20Wがロードされるのはなぜですか(このボックス*はテキストの周りに*を表示します)? – vtrz