2017-02-14 9 views
0

Я пытаюсь проверить зависимость между CFont высотой и размером на примере:Вычислить высоту шрифта из его размера в C++?

int main(int argc, char* argv[]) 
{ 
    int myVariableFontHeight = 90; 

    CFont * font = new CFont(); 

    LOGFONT lf; 
    memset(&lf,0,sizeof(LOGFONT)); 
    lf.lfHeight = myVariableFontHeight; 
    lf.lfWeight =FW_BOLD; 
    lf.lfCharSet = 1; 
    _tcscpy_s(lf.lfFaceName , "Arial Unicode MS");  
    font->CreatePointFontIndirect(&lf); 

    font->GetLogFont(&lf); 
    int fontHeight = lf.lfHeight; 

    HWND console = GetConsoleWindow(); 
    HDC dc = GetDC(console); 

    int nFontSize = -::MulDiv(lf.lfHeight, 72, ::GetDeviceCaps(dc, LOGPIXELSY)); 

    delete font; 

    return 0; 
} 

И результат всегда nFontSize = myVariableFontHeight/10. Что это за фактор 10? Откуда это? Можно ли вычислить высоту шрифта из заданного размера?

Thanks

+0

Какую проблему вы действительно пытаетесь решить? – IInspectable

+0

В нашем инструменте 'myVariableFontHeight' было зафиксировано значение 90. После того как я сделал это, я хотел бы использовать размеры шрифта, как в обычных текстовых редакторах. Но этот var используется несколько в коде, поэтому я не хочу нарушать логику и вычислять ее с помощью myFontSize. – alex555

ответ

1

Это код кода MFC. Это в документации. Самая первая строка онлайн-документации для CFont :: CreatePointFontIndirect гласит:

Эта функция такая же, как CreateFontIndirect за исключением того, что член lfHeight из LOGFONT интерпретируется в десятых долях точки , а не единицы устройства.

Итак, если вы хотите создать 10 пт шрифт, вы установите lf.lfHeight 100.