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

NONCLIENTMETRICS ncm = { sizeof(NONCLIENTMETRICS) };
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
// ncm.lfMessageFont 即為 LOGFONT 結構
CClientDC dc(this); // 或 CWindowDC
CFont font; font.CreateFontIndirect(&ncm.lfMessageFont);
CFont* pOld = dc.SelectObject(&font);
CRect rc(0,0,0,0);
dc.DrawText(strText, &rc, DT_CALCRECT | DT_WORDBREAK);
// rc.Width() / rc.Height() 即為所需寬高
dc.SelectObject(pOld);
ctrl.MoveWindow(x, y, rc.Width(), rc.Height());
DT_CALCRECT 只計算不繪製,矩形會被修改為緊貼文字的大小CRect 左上角可設為預期位置,DrawText 會保留 left/top 只擴展 right/bottom