Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

[WinAPI] Как получить пользовательский шрифт кнопок или меню?

Подскажите пожалуйста функцию WinAPI, подобную GetSysColor
или GetSysColorBrush, но только для шрифтов.
Можно ли вообще узнать каким шрифтом отображается текст на кнопке
системой? не залезая в HKCU\Control Panel\Desktop\WindowMetrics?

Задача такая: в OWNERDRAW ListBox'е рисовать текст шрифтом,
установленным для "рельефных объектов" в "свойствах экрана". Т.е. нужно
как-то узнать этот шрифт.

Пробовал следующее: брать DC от родителя (диалога) и получать его текущий
шрифт, но там оказывается системный (MS System) :(

Ответить   Ivan Mikheikin Thu, 27 May 2004 15:18:11 +0400 (#156080)

 

Ответы:

Аналог - GetStockObject с указанием соответствующей константы (SYSTEM_FONT,
ANSI_VAR_FONT, ...). С помощью GetObject можно затем получить LOGFONT.
Шрифт SYSTEM_FONT по умолчанию используется для отрисовки
органов управления, меню и т.п.

Лучше пореже пользоваться такими ключами реестра. Для этого есть функция
SystemParametersInfo(). С ее помощью можно получить большинство
параметров. Насчет кнопок - для них, насколько я знаю,
действуют параметры отрисовки по умолчанию
(если разговор о шрифте - SYSTEM_FONT).

С этим, к сожалению, помочь не могу - такая задача не возникала, а
вспомнить, есть ли это где-нибудь в документации, не удалось.
Узнать об использовании и получении этих
параметров было бы интересно и мне.

Последнее уточнение. Если используется Win XP и действуют
темы, более точные сведения о параметрах отрисовки
можно получить через Theme API. Например, можно
получить шрифт для кнопки в различных
состояниях с помощью GetThemeFont().
Номер выпуска : 3146
Возраст листа : 249 (дней)
Количество подписчиков : 407
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/156339
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Fri, 28 May 2004 10:49:57 +0400 (#156339)

 

Я тоже так думал :)
SYSTEM_FONT System font. By default, the system uses the system font
to draw menus, dialog box controls, and text.
Windows 95/98 and Windows NT: The system font is MS Sans Serif.
Windows 2000/XP: The system font is Tahoma
Там даже не Tahoma, а MS System.

В этом и есть проблема - отрисовка по умолчанию не
совпадает с установками в свойствах экрана.

Вообще контрол был написан на MFC как унаследованный от CListBox.
Cоздавался Creat'ом напрямую в OnInitDialog'е.
Сейчас скинул на диалог обычный listbox и создал для него
переменную моего класса. И теперь в контексте, передаваемом в
DrawItem при прорисовке элемента списка, уже выбран нужный шрифт ;)

Но проблема остаётся... как получить нормальный шрифт, которым следует
рисовать текст в списках, кнопках и т.д., если создавать контролы не
в диалоге, например?

Как мне кажется это и проблема известного
Total Commander'а =) Часто слышу возгласы, что там уродский шрифт и
народ бы пользовался, да не нравится как выглядит, а потом с
удивлением слушают рассказ о том, что шрифт можно настроить...

Это уже отдельный разговор.. Здесь вроде как полегче получить
нужную информацию. Но надо чтобы в ME/2000 тоже нормально рисовалось.
(желательно ;))

Ответить   Ivan Mikheikin Sat, 29 May 2004 18:03:49 +0400 (#158498)

 

Здравствуйте !

Может, Вам поможет функция SystemParametersInfo с первым
параметром - SPI_GETNONCLIENTMETRICS.
Смотрите также описание структуры NONCLIENTMETRICS.

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 3177
Возраст листа : 252 (дней)
Количество подписчиков : 413
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/158781
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 31 May 2004 22:05:06 +0400 (#158781)

 

Здравствуйте, Ivan!

27 мая 2004 г. в 18:18:11 GMT Вы писали:

См.:

SystemParametersInfo(SPI_GETICONTITLELOGFONT, ...)
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ...)

--
С уважением, Кирилл Харламов.
http://rezone.by.ru
Номер выпуска : 3156
Возраст листа : 250 (дней)
Количество подписчиков : 409
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/157383
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Fri, 28 May 2004 11:54:04 +0700 (#157383)