没有CDC的MFC字符串宽度

时间:2011-09-08 16:42:59

标签: 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;

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

如果您不知道需要使用的字体,如何计算宽度?

我建议你在这个位置计算宽度,在那里你可以看到你需要的设备上下文,并将它传递给你需要这个宽度的类。