Как, имея на руках структуру типа LOGFONT (или сам объект класса CFont), вычислить кегль шрифта или наоброт.
lfHeigth, насколько понимаю, не подходит.
greatsokol wrote:
> Как, имея на руках структуру типа LOGFONT (или сам объект класса CFont), вычислить кегль шрифта или наоброт.
> lfHeigth, насколько понимаю, не подходит.
Если не ошибаюсь, положительный height и есть размер шрифта в пунктах (кегль). Отрицательный — в пикселах.
На страничке есть формула для перевода кегля в пикселы для конкретного разрешения:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_1wmq.asp
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9
Здравствуйте, MaximE, Вы писали:
ME>greatsokol wrote:
>> Как, имея на руках структуру типа LOGFONT (или сам объект класса CFont), вычислить кегль шрифта или наоброт.
>> lfHeigth, насколько понимаю, не подходит.
ME>Если не ошибаюсь, положительный height и есть размер шрифта в пунктах (кегль). Отрицательный — в пикселах.
ME>На страничке есть формула для перевода кегля в пикселы для конкретного разрешения: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_1wmq.asp
ME>--
ME>Maxim Yegorushkin
Извините, может быть я не в курсе глубинных процессов, но, если я инициализирую структуру типа LOGFONT перед передачей в диалог выбора фонта и указываю lfHeight=14, то далог, будучи показанным, показывает мне кегль равный 11 (не точное значение, но вобщем — отличное от ожидаемого). Может быть кто-нибудь с этим уже боролся?
greatsokol wrote:
> Извините, может быть я не в курсе глубинных процессов, но, если я инициализирую структуру типа LOGFONT перед передачей в диалог выбора фонта и указываю lfHeight=14, то далог, будучи показанным, показывает мне кегль равный 11 (не точное значение, но вобщем — отличное от ожидаемого).
Как ты определяешь кегль на диалоге?
Корректный метод определения: иметь на диалоге заглавную Х, померить ее высоту в пикселах (h), разделить на разрешение устройства дисплея, и разделить на 1/72 (размер пункта в дюймах).
Т.е., если высота буквы Х составляет 12 пикселов, разрешение монитора 96ppi, то размер шрифта Х в пунктах (кегль) есть:
12 / 96 * 72 = 9 пунктов.
Имей ввиду, что гарнитуры разных производителей по разному трактуют размер шрифта: у некоторых он включает внутренний интерлиньяж, у некоторых нет.
> Может быть кто-нибудь с этим уже боролся?
Я конкретно занимался device independent precise text layout (как в продуктах Adobe).
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9
Здравствуйте, MaximE, Вы писали:
ME>greatsokol wrote:
>> Извините, может быть я не в курсе глубинных процессов, но, если я инициализирую структуру типа LOGFONT перед передачей в диалог выбора фонта и указываю lfHeight=14, то далог, будучи показанным, показывает мне кегль равный 11 (не точное значение, но вобщем — отличное от ожидаемого).
ME>Как ты определяешь кегль на диалоге?
ME>Корректный метод определения: иметь на диалоге заглавную Х, померить ее высоту в пикселах (h), разделить на разрешение устройства дисплея, и разделить на 1/72 (размер пункта в дюймах).
ME>Т.е., если высота буквы Х составляет 12 пикселов, разрешение монитора 96ppi, то размер шрифта Х в пунктах (кегль) есть:
ME>12 / 96 * 72 = 9 пунктов.
ME>Имей ввиду, что гарнитуры разных производителей по разному трактуют размер шрифта: у некоторых он включает внутренний интерлиньяж, у некоторых нет.
>> Может быть кто-нибудь с этим уже боролся?
ME>Я конкретно занимался device independent precise text layout (как в продуктах Adobe).
ME>--
ME>Maxim Yegorushkin
Опять таки, я дико извинияюсь

А на диалоге выбора шрифта мы что за величину указываем, когда выбираем размер? Пункты или пиксели?
greatsokol wrote:
> Опять таки, я дико извинияюсь
> А на диалоге выбора шрифта мы что за величину указываем, когда выбираем размер? Пункты или пиксели?
Диалоги разные бывают

Надо смотреть в код или читать доки.
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9
Здравствуйте, MaximE, Вы писали:
ME>greatsokol wrote:
>> Опять таки, я дико извинияюсь
>> А на диалоге выбора шрифта мы что за величину указываем, когда выбираем размер? Пункты или пиксели?
ME>Диалоги разные бывают
Надо смотреть в код или читать доки.
ME>--
ME>Maxim Yegorushkin
Например вот такойм (MFC):
HWND hwnd; // owner window
HDC hdc; // display device context of owner window
CHOOSEFONT cf; // common dialog box structure
static LOGFONT lf; // logical font structure
static DWORD rgbCurrent; // current text color
HFONT hfont, hfontPrev;
DWORD rgbPrev;
// Initialize CHOOSEFONT
ZeroMemory(&cf, sizeof(cf));
cf.lStructSize = sizeof (cf);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = rgbCurrent;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
if (ChooseFont(&cf)==TRUE) {
hfont = CreateFontIndirect(cf.lpLogFont);
hfontPrev = SelectObject(hdc, hfont);
rgbCurrent= cf.rgbColors;
rgbPrev = SetTextColor(hdc, rgbCurrent);
.
.
.
}