我有C ++ Win32应用程序,它支持Windows CE 6.0,它使用GDI显示在矩形内剪切的不同大小的文本。我有一个问题,文本被修剪在CE版本而不是Windows 7版本中我跟着它到我在使用TEXTMETRIC结构的tmAveCharWidth成员缩放字体时。
我有这样的代码来获取tmAveCharWidth,结果是Windows 7上的8和Windows CE上的9具有相同的字体,这导致以后的计算出现问题。什么可以解释这种差异?
LOGFONT logFont = {};
logFont.lfHeight = -19;
logFont.lfWidth = 0;
logFont.lfWeight = FW_NORMAL;
logFont.lfCharSet = DEFAULT_CHARSET;
logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = DEFAULT_QUALITY;
logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
::wcscpy_s(logFont.lfFaceName, LF_FACESIZE, faceName);
HFONT font = ::CreateFontIndirect(&logFont);
HDC hdc = ::CreateCompatibleDC(NULL);
HGDIOBJ oldObj = ::SelectObject(hdc, font);
TEXTMETRIC metrics = {};
::GetTextMetrics(hdc, &metrics);
std::cout << metrics.tmAveCharWidth;
使用AddFontResource()添加程序使用的字体,我使用GetFontData()来检查我使用CreateFontIndirect()创建的字体是否实际上在两个版本中都使用了该字体。