2011-09-08 56 views
3

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

我试图创建一个不与显示器链接的虚拟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; 

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

回答

6

字体的宽度取决于它如何转换为像素,这取决于它在其上呈现的设备。例如,打印机与显示器显然不同。这就是为什么你需要一个DC来完成这个功能。

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

0

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

我会建议计算宽度的地方,你会看到你需要的设备上下文,并将它传递给需要这个宽度的类。

+0

虽然我知道字体,CFont对象m_font? – CD1212