Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不带CDC的MFC字符串宽度_C++_Mfc_Fontmetrics - Fatal编程技术网

C++ 不带CDC的MFC字符串宽度

C++ 不带CDC的MFC字符串宽度,c++,mfc,fontmetrics,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_tempCD

是否有任何方法可以在不使用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;

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

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


我建议在您看到所需设备上下文的位置计算宽度,并将其传递给需要此宽度的类。

字体的宽度取决于如何转换为像素,这取决于它所呈现的设备。例如,打印机和显示器显然是不同的。这就是为什么这个函数需要DC


您可以使用
CDC::FromHandle(::GetDC(NULL))
获取桌面的DC,但是我知道字体,CFont对象m\u字体?