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