Re[3]: Набор символов для шрифта
От: Аноним  
Дата: 24.10.07 14:56
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.