首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 使用 CEdit 控件顯示多行文本數據

     編輯:程式設計疑難解答

問題背景

MFC 對話框或視圖中需要顯示從文件讀取的多行文本數據,單行 CStatic 或單行 CEdit 無法滿足。

解決方案:多行編輯框 (CEdit + ES_MULTILINE)

步驟 1:資源編輯器添加控件

  1. 打開對話框資源 (.rc),從工具箱拖入 Edit Control。
  2. 右鍵屬性 → Styles 勾選:
    • Multi-line (ES_MULTILINE) —— 核心屬性
    • Vertical Scroll (ES_AUTOVSCROLL | WS_VSCROLL) —— 內容超出自動顯示滾動條
    • Read-only (ES_READONLY) —— 僅顯示不編輯時勾選
    • Want Return (ES_WANTRETURN) —— 允許輸入換行(編輯模式需勾選)
  3. 設置 ID,如 IDC_EDIT_LOG。

步驟 2:變量關聯

在對話框類 (CMyDialog) 中添加控件變量:

// MyDialog.h
class CMyDialog : public CDialogEx {
    // ...
    CEdit m_editLog; // 控件變量
    // 或 CString m_strLog; // 數據變量 (DDX_Text)
};

步驟 3:讀取文件並顯示

void CMyDialog::OnBnClickedBtnLoad() {
    CFileDialog dlg(TRUE, _T("txt"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, _T("文本文件 (*.txt)|*.txt|所有文件|*.*||"));
    if (dlg.DoModal() != IDOK) return;

    CStdioFile file;
    if (!file.Open(dlg.GetPathName(), CFile::modeRead | CFile::typeText)) {
        AfxMessageBox(_T("打開文件失敗"));
        return;
    }

    CString strLine, strAll;
    while (file.ReadString(strLine)) {
        strAll += strLine + _T("\r\n"); // 保留換行
    }
    file.Close();

    // 方式一:控件變量直接設置 (推薦大文本)
    m_editLog.SetWindowText(strAll);
    m_editLog.LineScroll(m_editLog.GetLineCount()); // 滾動到底部

    // 方式二:DDX 變量更新 (需 UpdateData(FALSE))
    // m_strLog = strAll;
    // UpdateData(FALSE);
}

進階:Rich Edit Control (CRichEditCtrl)

若需富文本(顏色、字體、圖片),使用 CRichEditCtrl:

  1. 調用 AfxInitRichEdit2() 在 InitInstance 中初始化。
  2. 資源屬性選 Rich Edit Control (IDC_RICHEDIT)。
  3. 變量類型改為 CRichEditCtrl。
  4. 設置格式:CHARFORMAT2 cf; cf.dwMask = CFM_COLOR; cf.crTextColor = RGB(0,0,255); m_richEdit.SetSelectionCharFormat(cf);

常見問題排查

  • 內容不換行:確認 ES_MULTILINE 已勾選,且文本包含 \r\n (Windows) 或 \n (Unix),MFC 支持兩者。
  • 大文件卡頓:SetWindowText 會重繪,超大文本建議分塊 ReplaceSel 或使用虛擬模式 EM_SETTEXTMODE。
  • 滾動條不顯示:確保勾選 WS_VSCROLL 和 ES_AUTOVSCROLL,且控件高度足夠顯示多行。

完整示例下載

MFC 多行文本顯示 Demo (含文件讀取、RichEdit 彩色輸出)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved