Ответ Марка Рэнсома сработает в 99,999% случаев, но есть теоретическая возможность, что он может дать неправильный ответ.
Чтобы избежать этой возможности, вы должны использовать GetTextMetrics
, чтобы получить TEXTMETRICS
фактического шрифта и проверить, является ли tmCharSet
SYMBOL_CHARSET
.
В чем разница между проверкой lfCharSet
и tmCharSet
?
При создании HFONT
Windows создает внутреннюю копию LOGFONT
. Он описывает нужный шрифт, который может отличаться от шрифта, который вы получаете.
Когда вы выбираете HFONT
в контексте устройства (или информации), сопоставитель шрифтов находит фактический шрифт, который лучше всего соответствует LOGFONT
, связанному с этим HFONT
. Однако лучшее совпадение может быть не точным. Поэтому, когда вам нужно узнать что-то о реальном шрифте, вы должны позаботиться о том, чтобы запросить HDC
, а не HFONT
.
Если вы запросите HFONT
с помощью GetObject
, вы получите обратно LOGFONT
оригинал. GetObject
ничего не говорит вам о реальном шрифте, потому что он не знает, какой фактический шрифт выбрал (или выберет) шрифт.
API, которые запрашивают шрифт, выбранный для определенного DC, например GetTextMetrics
, GetTextFace
и т. Д., Предоставят вам информацию о реальном шрифте.
Для этой проблемы ответ Марка (с использованием GetObject
), вероятно, всегда будет работать, потому что шансы сопоставителя шрифтов при выборе шрифта символа, когда вы хотите использовать текстовый шрифт (или наоборот), ничтожны. Тем не менее, в общем, когда вы хотите узнать что-то о реальном шрифте, найдите способ задать HDC
.