首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

依據文字長度動態調整視窗/控制項大小

     編輯:關於VC++

核心 API:DrawText + DT_CALCRECT

Windows 提供 DrawText 可直接計算文字所需矩形區域,無需實際繪製。搭配系統非用戶區度量資訊(NONCLIENTMETRICS)取得使用者選定的訊息字體,即可精確決定靜態控制項尺寸。

顯示屬性對話框

完整步驟

1. 取得系統訊息字體

NONCLIENTMETRICS ncm = { sizeof(NONCLIENTMETRICS) };
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
// ncm.lfMessageFont 即為 LOGFONT 結構

2. 建立字體並選入 DC

CClientDC dc(this); // 或 CWindowDC
CFont font; font.CreateFontIndirect(&ncm.lfMessageFont);
CFont* pOld = dc.SelectObject(&font);

3. 計算文字矩形

CRect rc(0,0,0,0);
dc.DrawText(strText, &rc, DT_CALCRECT | DT_WORDBREAK);
// rc.Width() / rc.Height() 即為所需寬高

4. 還原 DC 並套用至控制項

dc.SelectObject(pOld);
ctrl.MoveWindow(x, y, rc.Width(), rc.Height());

關鍵細節

  • DT_CALCRECT 只計算不繪製,矩形會被修改為緊貼文字的大小
  • 初始 CRect 左上角可設為預期位置,DrawText 會保留 left/top 只擴展 right/bottom
  • 必須在計算前將正確字體選入 DC,否則尺寸會錯誤
  • 適用於任意 DC(螢幕、印表機、記憶體 DC)

應用場景

  • 動態建立靜態標籤、工具提示、訊息方塊
  • 報表列印時依欄位內容自動調整欄寬
  • 多語言介面下的自適應版面配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved