没有CDC的MFC字符串宽度

cdy*_*yer 3 c++ mfc fontmetrics

有没有办法在不使用CDC或使用未与显示器链接的CDC的情况下获取字符串的宽度(以像素为单位).需要检索字符串宽度的类不会从CWnd继承以使用CWnd :: GetDC(),并且无法将现有CDC传递给该函数.

我试图创建一个未与显示器链接的虚拟CDC,但这会导致MFC崩溃.理想情况如下:

m_font = new CFont();
m_font->CreatePointFont(size * 10, _T("Arial"));

m_tempCDC = new CDC();
m_tempCDC->SelectObject(m_font);

return m_tempCDC->GetOutputTextExtent(_T("Test")).cx;
Run Code Online (Sandbox Code Playgroud)

编辑:应该替换字符串文字的字体名称变量.

Mar*_*som 6

字体的宽度取决于它如何转换为像素,这取决于它所呈现的设备.例如,对于打印机与显示器,显然会有所不同.这就是为此功能需要DC的原因.

您可以使用桌面获取DC CDC::FromHandle(::GetDC(NULL)).