Здравствуйте, DeeoniS, Вы писали:
DS>Здравствуйте, Аноним, Вы писали:
А>>У контролов дефолтный шрифт который получается по GetFont равен NULL.
А>>Набор символов задаётся при создании нового шрифта. Если SetFont с новым
А>>шрифтом не устанавливает новый шрифт (то есть ни начертания, ни размер, ничего),
А>>то скорее всего используется какой-то хитрый субклассинг. То есть переопределяется
А>>процедура отрисовки контрола, или вообще стиль "оwnerdraw". А там может быть что угодно хоть по пикселям текст отрисовываться вообще без шрифта...
Насколько я помню, все GDI функции рисуют тем шрифтом, который выбран в данный момент в текущем конткстк окна.
Контролы обчные обязы принимать сообщение WM_SETFONT и в ответ на него устанавливать этот шрифт.
LOGFONT lf;
.....
.....
HFONT hFont;
hFont = CreateFontIndirect(&lf);
SendMessage(hwndControl, WM_SETFONT,(WPARAM) hFont,(LPARAM) LOWORD(TRUE));
Если контрол на это не реагирует, то перед вызовом всех тектовых функций можно напрямую самому попытаться
выбрать шрифт к том контекстк, где рисуется текст.
HFONT hFont;
hFont = CreateFontIndirect(&lf);
hOldFont = SelectObject(hdc,hFont);
Все поля в структуре LOGFONT можно посмотреть вызывав например для заведомо нормального контрола дилога с каким-то пользовательским шривтом,
сообщение (чем пытаться постичь их смысл читая МСДН проще передрать всё что не интересует)
HFONT hFont;
hFont = (HFONT) SendMessage(hwndControl,WM_GETFONT,0,0);
if (hFont==0)return FALSE;
GetObject(hFont,sizeof(LOGFONT),&lf);
или если выбрали новый шрифт,
GetObject(hOldFont,sizeof(LOGFONT),&lf);
Скорее всего нужно будет повторить все поля а модифицировать только поле lfCharSet
Если русский то приминять RUSSIAN_CHARSET
если немецкий то по моему ANSI_CHARSET