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

Ваш аккаунт

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

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

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

WM_MEASUREITEM и меню

14K
21 января 2008 года
dsoft
36 / / 08.06.2006
Проблема в следующем: Имеется меню с флагом MFT_OWNERDRAW для всех пунктов меню (WinAPI позволяет изменять только отдельные пункты в отличии от VCL). Меняю Caption у одного из пунктов. Изменение провожу через функции GetMenuItemInfo, SetMenuItemInfo. Судя по справке после вызова последней функции система автоматически должна перестроить меню, но так происходит только в WINXP, в Win98 сообщение WM_MEASUREITEM больше не вызывается. Вызываю его принудительно для всех пунктов, но результат нулевой. Все бы ничего, но изменяемые строки зачастуе длиннее и не помещаются в ширину меню. Как все-таки заставить систему пересчитать всю менюшку.
833
21 января 2008 года
leich
135 / / 27.09.2006
У вас подход не правильный:
MFT_OWNERDRAW:
Assigns responsibility for drawing the menu item to the window that owns the menu. The window receives a WM_MEASUREITEM message before the menu is displayed for the first time, and a WM_DRAWITEM message whenever the appearance of the menu item must be updated. If this value is specified, the dwTypeData member contains an application-defined 32-bit value.
Вам тут надо просто обрабатывать WM_MEASUREITEM и WM_DRAWITEM. Как я понимаю WM_DRAWITEM вам будет приходить каждый раз, когда будет показываться менюшка.
14K
21 января 2008 года
dsoft
36 / / 08.06.2006
Цитата: leich
У вас подход не правильный:
...
Вам тут надо просто обрабатывать WM_MEASUREITEM и WM_DRAWITEM. Как я понимаю WM_DRAWITEM вам будет приходить каждый раз, когда будет показываться менюшка.



Естественно эти сообщения обрабатывются, но как я писал, при смене заголовка у итема не пересчитывается размер менюшки, т.е. бльше не вызывается WM_MEASUREITEM. И как я также сообщал это глюк происходит только в Win98.

833
21 января 2008 года
leich
135 / / 27.09.2006
Ну принудительно то конечно ничего вызывать нельзя.
DrawMenuBar вы пробовали уже наверное?
14K
21 января 2008 года
dsoft
36 / / 08.06.2006
Кто его знает, можно или нет вызывать принудительно. Система ведь вызывает. Ну а DrawMenuBar конечно же вызывал.
833
21 января 2008 года
leich
135 / / 27.09.2006
Да система вызывает тока когда ей надо. Притом она с параметрами вызывает. А пересоздать не пробовали?
14K
21 января 2008 года
dsoft
36 / / 08.06.2006
Возможно для Win98 так и придется поступить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог