IInspectable的回答讓我開始,但缺少位來選擇合適的字體(處理系統字體DPI設置)。下面的方法現在做我所需要的:
CRect GetControlTextRect(CWnd *pWnd)
{
CString text;
pWnd->GetWindowText(text);
CDC* pDC = pWnd->GetDC();
CFont* pFont = pWnd->GetParent()->GetFont();
pDC->SelectObject(pFont);
CRect textRect;
pWnd->GetWindowRect(&textRect);
pDC->DrawTextEx(text, &textRect, DT_CALCRECT, NULL);
return textRect;
}
稱爲f.e.喜歡這裏:
CWnd * txtCtrl = GetDlgItem(IDC_STATIC); // IDC_STATIC is the resource ID of the control
CRect rect = GetControlTextRect(txtCtrl);
ScreenToClient(rect);
或可選擇地想:
CStatic txtCtrl = GetDlgItem(IDC_STATIC); // IDC_STATIC is the resource ID of the control
CRect rect = GetControlTextRect(&txtCtrl);
ScreenToClient(rect);
除非我失去了一些東西,[CWnd的::函數GetDlgItem(https://msdn.microsoft.com/en-us/library/ 77d16yhw(v = vs.120).aspx)返回一個指向CWnd的指針。這會讓你的示例代碼不正確。 – rrirower
+1感謝您的代碼片段。爲了獲得更改系統字體的正確值而缺少一點(請參閱下面的答案),但它幫助我開始。 – BmyGuest