有没有办法在不使用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;
编辑:应该替换字符串文字的字体名称变量。
答案 0 :(得分:6)
字体的宽度取决于它如何转换为像素,这取决于它所呈现的设备。例如,对于打印机与显示器,显然会有所不同。这就是为此功能需要DC的原因。
您可以使用CDC::FromHandle(::GetDC(NULL))
获取桌面的DC。
答案 1 :(得分:0)
如果您不知道需要使用的字体,如何计算宽度?
我建议你在这个位置计算宽度,在那里你可以看到你需要的设备上下文,并将它传递给你需要这个宽度的类。