3

有没有办法在不使用 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;

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

4

2 回答 2

6

字体的宽度取决于它如何转换为像素,这取决于渲染它的设备。例如,打印机与显示器显然会有所不同。这就是为什么您需要一个 DC 来执行此功能的原因。

您可以使用CDC::FromHandle(::GetDC(NULL)).

于 2011-09-08T17:09:35.710 回答
0

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

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

于 2011-09-08T16:51:37.153 回答