问题是这样的,我的目的是使一个静态文本框根据文字内容自适应大小,使用了GetOutputTextExtent函数 CRect rect;
CSize size;
CString strText = _T("staticsadfdfgwergdfgsdfgrsfcc"); CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
CDC* pDC = pWnd->GetDC(); size = pDC->GetOutputTextExtent(strText);
pWnd->GetWindowRect(&rect);
pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
pWnd->ReleaseDC(pDC);
pWnd->SetWindowText(strText);但是发现得到的结果不是很准确,请问是何故?
CSize size;
CString strText = _T("staticsadfdfgwergdfgsdfgrsfcc"); CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
CDC* pDC = pWnd->GetDC(); size = pDC->GetOutputTextExtent(strText);
pWnd->GetWindowRect(&rect);
pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
pWnd->ReleaseDC(pDC);
pWnd->SetWindowText(strText);但是发现得到的结果不是很准确,请问是何故?
从pWnd GetFont选入 pDC吧
然后选入pDC中再调用GetOutputTextExtent
你好,我按你说的搞了一下,发现字体大小仍然计算不对 CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
CDC* pDC = pWnd->GetDC();
CFont* pFont = pWnd->GetFont();
pDC->SelectObject(pFont);
size = pDC->GetOutputTextExtent(strText);
pWnd->GetWindowRect(&rect);
pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
pWnd->ReleaseDC(pDC);
pWnd->SetWindowText(strText);
CRect rect;
CSize size;
CString strText = _T("根据文本大小自适应文本框"); CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
CDC* pDC = pWnd->GetDC();
CFont* pFont = pWnd->GetFont();
pDC->SelectObject(pFont);
size = pDC->GetOutputTextExtent(strText);
pWnd->GetWindowRect(&rect);
pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
pWnd->ReleaseDC(pDC);
pWnd->SetWindowText(strText);没贴全,_T("根据文本大小自适应文本框"),看图片“框”字被截掉了,而且高度也被截了一部分
请问这个界面上显示的字体要如何获取,我一开始用pDC的字体,计算的长度明显长了,第二次我用pWnd->GetFont()得到的字体,计算长度又小了。这个显示的字体到底是哪个?
GetTextExtent 是 屏幕 DC
结果还是一样。 不清楚GetTextExtent为什么就不能得到正确的大小呢。难道因为不是等宽字体? 非等宽字体又怎么搞?