在 MFC `OnDraw(CDC* pDC)` 中輸出文字,是繪圖基礎。`TextOut` 適合單行定位輸出,`DrawText` 支援矩形區域內多行、對齊、截斷省略號等豐富排版。本文詳細列舉 `DrawText` 格式旗標組合技巧,助你精準控制文字呈現。
| 函數 | 特點 | 適用場景 |
|---|---|---|
| `BOOL TextOut(int x, int y, const CString& str)` | 單行、指定左上角座標 | 簡單標籤、座標精確放置 |
| `int DrawText(const CString& str, LPRECT lpRect, UINT nFormat)` | 矩形區域、多行、對齊、截斷、製表展開 | 段落、按鈕文字、自動換行區域 |
旗標可用 `|` 組合。常用組合:
void CMyView::OnDraw(CDC* pDC) {
CRect rect(10, 10, 300, 100);
CString str = _T("這是一段很長的文字,將在矩形區域內自動換行顯示...");
// 多行、置中、單字換行
pDC->DrawText(str, &rect, DT_CENTER | DT_WORDBREAK | DT_VCENTER);
// 單行、右對齊、尾部省略號
CRect r2(10, 120, 200, 140);
pDC->DrawText(str, &r2, DT_RIGHT | DT_SINGLELINE | DT_END_ELLIPSIS | DT_MODIFYSTRING);
// 計算文字實際需求高度
CRect rCalc(0, 0, 200, 0);
int height = pDC->DrawText(str, &rCalc, DT_CALCRECT | DT_WORDBREAK);
// height 即為所需高度,rCalc.bottom 更新為實際底部
}
`OnDraw` 參數 `pDC` 在螢幕、列印預覽、實際列印時分別對應 `CDC`、`CPreviewDC`、印表機 DC。同一份繪圖代碼即可實現 WYSIWYG,善用裝置無關特性。