三種常見寫入情境
- 尾端附加:取得文字長度,設定選取範圍至末尾,呼叫
ReplaceSel。
- 游標處插入/取代:使用
CHARRANGE 取得目前選取範圍,若無選取則在游標處插入,否則取代選取文字。
- 全選文字:
SetSel(0, -1)。
程式碼範例
// 1. 尾端附加
void CRichEditUseDoc::OnTextWriteafter() {
CRichEditView* pView = GetView();
CRichEditCtrl& edit = pView->GetRichEditCtrl();
CString str = _T("ABCDEFG\r\n");
int len = edit.GetWindowTextLength();
edit.SetSel(len, len);
edit.ReplaceSel(str);
}
// 2. 游標處插入
void CRichEditUseDoc::OnTextWriteCur() {
CRichEditView* pView = GetView();
CRichEditCtrl& edit = pView->GetRichEditCtrl();
CHARRANGE cr; edit.GetSel(cr);
CString str = _T("12345");
if (cr.cpMin != cr.cpMax) edit.SetSel(cr.cpMin, cr.cpMax);
else edit.SetSel(cr.cpMax, cr.cpMax);
edit.ReplaceSel(str);
}
// 3. 全選
void CRichEditUseDoc::OnTextSelectall() {
GetView()->GetRichEditCtrl().SetSel(0, -1);
}
關鍵點提醒
ReplaceSel 會取代目前選取範圍,若無選取則插入。
- 換行需使用
\r\n(Rich Edit 需求)。
- 若需設定字型、顏色等格式,需配合
CHARFORMAT2 與 SetSelectionCharFormat。
- 文件類別 (
CDocument) 操作視圖屬違反文件/視圖分離原則,實務上建議由視圖類別提供公用函式供文件呼叫,或透過訊息傳遞。