【发布时间】:2023-04-03 17:59:01
【问题描述】:
下面的代码计算将文本保存到复选框的矩形的大小。当我使用具有不同屏幕分辨率的显示器的固定计算机时,代码工作正常。但是当我在连接了外接显示器的笔记本电脑上运行完全相同的代码时,盒子太小了。笔记本电脑屏幕分辨率为 1680x1050,显示器为 1920x1080。
无论我在哪台计算机上运行 pclRect,它的值都是相同的。
有人知道如何解决这个问题吗?
结果:
void CForm::SetSize(CWnd *pCWnd, CRect *pclRect)
{
CDC *pclDC = m_pclPanel->GetDC();
CFont* font = pCWnd->GetFont();
LOGFONT logFont;
font->GetLogFont(&logFont);
CString str;
pCWnd->GetWindowText(str);//Get controller text
CClientDC dc(pCWnd);
dc.SelectObject(font);
int iWidth;
int iHeight;
long lFontSize = -MulDiv(logFont.lfHeight, GetDeviceCaps(pclDC->m_hDC, LOGPIXELSY), 72);
iWidth = dc.GetTextExtent(str).cx; //Get controller text length
iWidth += GetExtraWidth(); //This adds 18 to the width since it's the width of the checkbox itself
iHeight = abs(lFontSize) + GetExtraHeight();
pclRect->bottom = pclRect->top + iHeight;
pclRect->right = pclRect->left + iWidth;
pCWnd->MoveWindow(pclRect);
}
【问题讨论】: