Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отображение меню.

1.8K
20 октября 2003 года
SeregaLBN
62 / / 03.10.2003
Есть проблема. Рисую своё popup меню.

В обработчике сообщения WM_MEASUREITEM надо задавать размеры элемента меню.

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

Вопрос - как мне узнать системный HFONT для меню?

И второй вопрос.
При отрисовке моего пункта меню вся область для рисования больше чем я задавал. Слева, самой Виндой, отводится ещё область для рисунка "check'a" - рисунок точки, галочки (если данный пункт меню отмечен как ODS_CHECKED). Как мне узнать ширину данной области? А то получается, что текст в отображаемых мною пунктах меню не выровнен по сравнению с пунктами меню отображаемыми самой системой.

В атаче мой cpp файл, реализующий прорисовку меню.
401
21 октября 2003 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by SeregaLBN
Есть проблема. Рисую своё popup меню.

В обработчике сообщения WM_MEASUREITEM надо задавать размеры элемента меню.

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

Вопрос - как мне узнать системный HFONT для меню?

И второй вопрос.
При отрисовке моего пункта меню вся область для рисования больше чем я задавал. Слева, самой Виндой, отводится ещё область для рисунка "check'a" - рисунок точки, галочки (если данный пункт меню отмечен как ODS_CHECKED). Как мне узнать ширину данной области? А то получается, что текст в отображаемых мною пунктах меню не выровнен по сравнению с пунктами меню отображаемыми самой системой.

В атаче мой cpp файл, реализующий прорисовку меню.



Системный шрифт: GetStockObject(DEFAULT_GUI_FONT)
Чекбокс для меню: GetSystemMetrics(SM_CXMENUCHECK)

Пользуйтесь MSDN, батенька

1.8K
21 октября 2003 года
SeregaLBN
62 / / 03.10.2003
Увы, это не так.

1. Я тоже изначально брал HFONT из GetStockObject(SYSTEM_FONT) или из GetStockObject(DEFAULT_GUI_FONT), но они возвращают HFONT в системе по умолчанию, а не текущий (указанный в теме(схеме) Windows).
2. GetSystemMetrics(SM_CXMENUCHECK) возвращает размеры битмапа check'a. А величина смещения текста больше ширины битмапа.

Т.е. те же вопросы остаются:
1. Как узнать текущий системный HFONT меню.
2. Как узнать смещение текста слева для пункта меню.

В атаче приведена изменнёная ф-ция Cls_OnDrawItem, где о всём вышесказанном можно убедиться.
401
21 октября 2003 года
Br@in RIPper
289 / / 15.02.2003
для меню попробуй GetSystemMetrics(SM_CYMENU). по-моему это число равно высоте MenuItem'a, а отступ в слева = высоте MenuItem'a

а шрифт... при обработке WM_DRAWITEM попробуй брать шрифт из hDC: GetCurrentObject(hDC, OBJ_FONT)
1.8K
21 октября 2003 года
SeregaLBN
62 / / 03.10.2003
GetSystemMetrics(SM_CYMENU) тоже брал - тоже не совпадает со отступами рисуемыми самой виндой...

A при обработке WM_DRAWITEM нет смысла брать шрифт из GetCurrentObject(hDC, OBJ_FONT). Зачем - чтобы дальше назначить его в этот же hDC? Вот если бы мне можно было бы вызвать эту ф-цию при обработке WM_MEASUREITEM, но там у меня нет hDC от меню...
380
22 октября 2003 года
Arestov
285 / / 20.09.2000
Шрифт меню и прочие причипурки получать так:
Код:
NONCLIENTMETRICS ncm={0};
BOOL bResult;
HFONT hfntMenu;

ncm.cbSize = sizeof(ncm);
bResult = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, (PVOID)&ncm, 0);

if (!bResult) {..... return; }

// тут мы имеем в ncm.lfMenuFont сруктуру LOGFONT шрифта меню, создать шрифт можно с помощью CreateFontIndirect

hfntMenu = CreateFontIndirect(&ncm.lfMenuFont);

if (!hfntMenu) { ..... return; }


удачи!!! :)
1.8K
27 октября 2003 года
SeregaLBN
62 / / 03.10.2003
Цитата:
Originally posted by Arestov
Шрифт меню и прочие причипурки получать так:
 
Код:
NONCLIENTMETRICS ncm={sizeof(ncm)};
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, (PVOID)&ncm, 0);
...


удачи!!! :)



Спасибо - это подошло...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог