リッチエディットコントロールを使用して、画面にテキストを出力しようとしています。
月曜日のプレス1。
あなたの日は月曜日の
火曜日のプレス2です。
これを行う方法の簡単な例を実際に見つけることはできません。私が整理できたのはウィンドウテキスト(setWindowText)を設定することだけですが、他のすべては私を逃れています。短い例はありますか?
リッチエディットコントロールを使用して、画面にテキストを出力しようとしています。
月曜日のプレス1。
あなたの日は月曜日の
火曜日のプレス2です。
これを行う方法の簡単な例を実際に見つけることはできません。私が整理できたのはウィンドウテキスト(setWindowText)を設定することだけですが、他のすべては私を逃れています。短い例はありますか?
コメントにもかかわらず、リッチエディットコントロールでデータをフォーマットする方法について、あなたが尋ねた質問に答えます。数年前、私はこれをしなければならず、IOstreamのように少し扱うことができる何かを思いつきました(今日それをしているなら、私はおそらく少し違ったやり方をするでしょうが、それは人生です)。
まず、IOstreamのように動作するようにコードを記述しますが、リッチエディットコントロールに書き込みます。
// rich_stream.h:
#ifndef RICH_STREAM_H
#define RICH_STREAM_H
class rich_stream {
CRichEditCtrl &ctrl;
public:
rich_stream(CRichEditCtrl &ctrl_) : ctrl(ctrl_) { }
void add_text(char const *txt) {
ctrl.SetSel(-1,-1);
ctrl.ReplaceSel(txt);
}
void add_int(int val) {
CString temp;
temp.Format("%d", val);
add_text(temp);
}
void set_char_format(CHARFORMAT &fmt) {
ctrl.SetSelectionCharFormat(fmt);
}
};
inline rich_stream &operator<<(rich_stream &s, char const *t) {
s.add_text(t);
return s;
}
inline rich_stream &operator<<(rich_stream &s, CHARFORMAT &fmt) {
s.set_char_format(fmt);
return s;
}
inline CString nl() {
return CString("\n\n");
}
inline rich_stream &operator<<(rich_stream &s, CString (*f)()) {
s.add_text(f());
return s;
}
inline rich_stream &operator<<(rich_stream &s, int val) {
s.add_int(val);
return s;
}
#endif
次に、これを次のように使用します。
CHARFORMAT bold;
memset(&bold, 0, sizeof(bold));
bold.cbSize = sizeof(bold);
bold.dwMask = CFM_BOLD | CFM_FACE | CFM_SIZE;
bold.dwEffects = CFE_BOLD;
strcpy(bold.szFaceName, "Times");
bold.yHeight = 14 * 20;
CHARFORMAT normal;
memset(&normal, 0, sizeof(normal));
normal.cbSize = sizeof(normal);
normal.dwMask = CFM_BOLD | CFM_FACE | CFM_SIZE;
normal.dwEffects = 0;
strcpy(normal.szFaceName, "Times");
normal.yHeight = 14 * 20;
// ...
rich_stream txt(GetRichEditCtrl());
txt << bold << "Heading 1: " << normal << info1 << nl
<< bold << "Heading 2: " << normal << info2 << nl
<< bold << "Heading 3: " << normal << info3;
今日これを行っていた場合、ほぼ確実に、のラッパーとして小さなクラスを作成してCHARFORMAT
、フォーマットオブジェクトをもう少しきれいに構築できるようにします。おそらく、リッチエディットコントロールにデータを挿入するストリームバッファを備えた通常のiostreamとして実装することについても、少なくとも一生懸命考えているでしょう(しかし、当時、私はそれを行う必要があることを知るのに十分なストリームを知りませんでした)。
それを一瞥すると、実際には正確ではない他のいくつかのことがあります-add_text
を使用しSetSel(-1, -1);
ます。これにより、テキストの現在の長さが実際に取得されます(たとえば、を使用してGetWindowTextLength
、選択範囲を終了直後に設定します。
ワードパッドを使用してください。これもRichEditコントロールです。それはあなたのコントロールと自然に互換性のある方法であなたのRTFを生成します。