Прежде всего, если вы хотите указать только высоту шрифта, вы обычно хотите использовать CreatePointFont
. Во-вторых, Windows 95/98 / SE / Me умерла и ушла - и с ними, по сути, есть все основания использовать «текстовые» макросы Microsoft, такие как _T("whatever")
. Если вы хотите широкие символы, попросите их напрямую:
CFont font;
font.CreatePointFont(nFontHeight, L"Courier New");
Затем, как предлагает @MikMik, вы можете использовать GetTextMetrics
для получения ширины - но только после вы выбираете шрифт в DC (GetTextMetrics
получает данные для выбранного шрифта в DC, а не только для необработанного шрифта - особенно при небольших размерах шрифта, некоторые параметры настраиваются для компенсации разрешения устройства вывода).
Обратите внимание, однако, что даже для шрифта с фиксированной шириной ширина строки равна , а не обязательно char_width * num_chars
. По крайней мере, если я правильно помню, даже шрифт фиксированной ширины все еще может быть зачеркнут, что означает, что интервал корректируется в зависимости от того, какие пары символов встречаются вместе. Классический пример - пара типа AV
. Поскольку линии, где они находятся рядом друг с другом, как правило, находятся под одним и тем же углом (или, по крайней мере, очень близко к одному и тому же), расстояние будет скорректировано так, чтобы они были ближе друг к другу - фактически верхняя часть буквы «V» будет часто пересекаются с нижней частью «А». Ширина строки символов может варьироваться, даже если каждый отдельный символ имеет такую же ширину, как и все остальные.
Случайно, я не уверен, что это делает Courier New, но я вполне уверен, что по крайней мере несколько шрифтов фиксированной ширины это делают.