当字体大小从(-16 * i)/ 72更改为(-n * i)/ 72时,对于任何下面的n,GetCharABCWidths()和GetGlyphOutline()函数中似乎存在错误16。
字符'a'仍然正确显示,但函数返回FALSE和GDI_ERROR。 为什么???
GetCharABCWidths()的GetLastError()返回0(ERROR_SUCCESS)并且 GetGlyphOutline()GetLastError()返回1003(CAN NOT COMPLETE FUNCTION)。
MAT2 gmat = { {0, 1}, {0, 0}, {0, 0}, {0, 1} };
case WM_PAINT:
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
int i;
i = GetDeviceCaps(ps.hdc, LOGPIXELSY);
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = (-14 * i) / 72;
lf.lfWeight = FW_NORMAL;
lf.lfItalic = 0;
lf.lfCharSet = SYMBOL_CHARSET;
wcscpy(lf.lfFaceName, L"Symbol");
HFONT hFont;
hFont = CreateFontIndirect(&lf);
hFont = (HFONT)SelectObject(ps.hdc, hFont);
BOOL bx;
ABC abc;
TCHAR tx;
DWORD dwx;
tx = 'a';
if( !GetCharABCWidths(ps.hdc, tx, tx, &abc) ) dwx = GetLastError();
GLYPHMETRICS gm;
if( GetGlyphOutline(ps.hdc, tx, GGO_METRICS, &gm, 0, NULL, &gmat) == GDI_ERROR )
dwx = GetLastError();
TextOut(ps.hdc, 10, 20, (LPTSTR)&tx, 1);
EndPaint(hwnd, &ps);
答案 0 :(得分:2)
在我的系统上,Symbol既是光栅字体(symbole.fon
)又是OpenType字体(symbol.ttf
),所以当GDI决定使用光栅版本的字体时,你不会能够获得任何TrueType指标。要解决此问题,请将fdwOutputPrecision
的{{1}}成员设置为合适的成员,例如LOGFONT
。