GetCharABCWidths () и GetGlyphOutline () возвращают FALSE.Зачем? - PullRequest
0 голосов
/ 27 марта 2011

Кажется, есть ошибка в функциях GetCharABCWidths () и GetGlyphOutline (), когда размер шрифта изменяется с (-16 * i) / 72, на (-n * i) / 72, для любого n ниже16.

Символ «а» по-прежнему отображается правильно, но функции возвращают FALSE и GDI_ERROR.Почему ???

GetLastError () для GetCharABCWidths () возвращает 0 (ERROR_SUCCESS), а для GetGlyphOutline () GetLastError () возвращает 1003 (НЕ МОЖЕТ ПОЛНАЯ ФУНКЦИЯ).

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);

1 Ответ

2 голосов
/ 28 марта 2011

В моей системе Symbol существует как растровый шрифт (symbole.fon), так и шрифт OpenType (symbol.ttf), поэтому, когда GDI решит использовать растровую версию шрифта, вы не сможете получить какую-либоМетрики TrueType.Чтобы это исправить, установите для члена fdwOutputPrecision вашего LOGFONT что-то подходящее, например OUT_TT_PRECIS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...