Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Работа с меню (VB и WinAPI) Добавлено: 08.08.08 22:22  

Автор вопроса:  alibek
Хочу я сделать такую, достаточно стандартную штуку — когда пользователь активирует меню и перемещается по нему, в строке состояния нужно показывать краткую справку по выбранной команде.
Причем это бы хотелось сделать так, чтобы редактирование меню (добавление, изменение, удаление) не оборачивалось редактированием кучи вспомогательного кода.
Я попробовал сделать так. В VB есть объект Menu, это пункт меню, которое создается стандартным образом (через Menu Editor). У этого объекта есть несколько свойств, основные из которых это Name, Caption и Tag. В Name указывается имя объекта, с помощью которого им можно манипулировать, в Caption задается текст команды меню, в Tag может быть произвольный текст, у меня в Tag хранится описание команды (текст, который должен показываться в строке состояния, когда данный пункт меню выбран). Еще там есть свойство HelpContextID — если к программе привязан справочный файл, то когда пользователь нажмет F1, будет открыта справочная статья с указанным идентификатором. И к сожалению, там нет свойства hMenu.
Факт выбора меню я отлавливаю, получая оконное сообщение WM_MENUSELECT. Из wParam и lParam я получаю hMenu и порядковый номер выбранного пункта меню. И теперь мне надо узнать, какому объекту VB Menu это соответствует. И вот тут я и застрял.
Вначале у меня была мысль, когда приходит WM_INITMENU, надо пройтись по всем пунктам меню и проставить им HelpContextID. Ну а при WM_MENUSELECT получить GetMenuContextHelpId, и найти по нему нужный объект VB Menu (найти тот, у которого свойство HelpContextID будет равно GetMenuContextHelpId). Однако так не вышло, похоже, что у VB это свойство не запоминается в структуре MENUINFO, а хранится где-то у себя.
Второй вариант был такой, поставить хук на SetMenuItemInfo, затем перебрать все пункты стандартного меню и изменить какое-нибудь свойство. Таким образом можно будет построить таблицу соответствия между объектами Menu и hMenu. В принципе, так должно получиться, но уж очень это ректально получается.
В структуре MENUITEMINFO есть мембер dwItemData, в котором приложения могут хранить какие-то свои данные. Уверен, что все свойства объекта Menu VB хранит именно там. Но как до них добраться не знаю, это совершенно не документировано. Но может быть кто-нибудь знает? Это было бы лучшим способом.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 08.08.08 23:03
Что-то я ничего придумать не могу...

Ответить

Номер ответа: 2
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #2
Добавлено: 09.08.08 00:49
Понятия не имею как получить Tag, но Caption получить вполне реально.
Ну и от Caption уже плясать.

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 09.08.08 01:45
Так тут опять же таблица нужна...

Ответить

Номер ответа: 4
Автор ответа:
 alibek



Вопросов: 1
Ответов: 6
 Профиль | | #4 Добавлено: 09.08.08 02:51
Ну и от Caption уже плясать

Это халтура.
Мне нужен нормальный идентификатор. Caption не является уникальным.

Ответить

Номер ответа: 5
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #5
Добавлено: 09.08.08 12:58
Это халтура.

Да, я знаю :)

Мне нужен нормальный идентификатор.

Нормальный идент. это LOWORD(wParam) когда uMsg = WM_MENUSELECT, но создавая меню через редактор ты не знаешь какой ID будет у того или иного пункта.
Вот если бы ты изначально создавал меню через АПИ, тогда не пришлось бы так извращаться.

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 15.08.08 21:57
В более-менее известном примере под 6-ой бейсик
http://vbrussian.com/examples.asp?ID=105
в самопальном статус-баре показывается caption и хоткей.
Хотя возможно я просто не догоняю, потому что.. при чем тут HelpContext?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам