Страница: 1 |
Страница: 1 |
Вопрос: Меню (вопрос сложный)
Добавлено: 20.03.05 09:16
Автор вопроса: Vit | Web-сайт:
Пример:
Dim hMenu As Long, hSubMenu As Long, hSubMenuID As Long
hMenu = GetMenu(Me.hWnd)
hSubMenu = GetSubMenu(hMenu, 0)
hSubMenuID = GetMenuItemID(hSubMenu, 2)
Почему при скрытом (Visible=False) я не могу полчить SubMenu (т.е. hSubMenu=0)?
Цель такова: при нажатии на кнопку вылетает вслывающее меню и пользователь выбирает нужный пункт. Но мне нужно, чтобы муню было отформатировано специальным образом, т.е. значки, тип меню (MF_SEPARATOR, MF_BITMAP, MF_CALLBACKS и т.п.)
В коде после получения hSubMenuID я вызываю функцию
ModifyMenu(...)
Вопрос: как в конце концов можно получить этот ... идентификатор?
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 20.03.05 10:55
Думаю что ответ тебя мало порадует, но все же:
VB при скрытии он полностью удаляет менюшку, т.е. он его не скрывает, а просто удаляет, а при показе - снова созадет. Собственно поэтому ты и не можешь получить подменю - его просто нет )
Т.е. ты либо работаешь с меню на чистом АПИ, либо на чистом VB, выбор за тобой...
Номер ответа: 2
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #2
Добавлено: 20.03.05 11:06
Да, и если пойдёшь по API, то имей в виду, что GetMenuItemID возвращает 0, если у элемента есть подменю. Поэтому сразу переходи на GetMenuItemInfo.
Номер ответа: 3
Автор ответа:
Vit
Вопросов: 68
Ответов: 62
Web-сайт:
Профиль | | #3
Добавлено: 21.03.05 11:05
Понятно, я бы хотел пойти полностью с API, но им трудно создавать и удалять пункты меню, тем более обрабатывать их события. Я создают некоторое меню с индексом 0, а потом Load(...) и Unload(...). Если у вас есть примеры работы с API - присылайте. И как в конце концов получить ID для пункта меню, исходя из вышесказанного?
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 21.03.05 13:57
Ну скажем самый лучшеи способ изучения, открытие MSDN на страничке посвященной менюшкам, создать меню, сабклассить форму и смотреть что на нее приходит при кликах... WM_COMMAND приходит и ID менюшки, который ты задал сам... Вот только аккуратней надо быть, т.к. WM_COMMAND же вызывается и при нажатии на кнопку и пр. Т.е. тебе необходим уникальный ID...
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 21.03.05 14:15
Уникальный, но только в пределах самой менюшки Дело в том, что там передаётся ещё и флаг, показывающий, пришло сообщение от меню или от контрола.
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 21.03.05 14:31
Да, и если хочешь пример по API - то мы тут писАли как-то...
http://bbs.vbstreets.ru/viewtopic.php?p=56536#56536