Отловить значение меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Отловить значение меню

Сообщение X-BOND » 02.02.2004 (Пн) 14:53

Итак, создаю менюшку с помощью CreatePopupMenu
Вызывать умею, знаю как получить индекс пункта меню.
Но не знаю как получить текстовую строку выбранного пункта, и также наличие "галочки".
Подскажите

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 02.02.2004 (Пн) 16:32

Не легче ли использовать обычное меню & PopupMenu & сабклассинг?
Нет ничего невозможного для человека с интеллектом.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 02.02.2004 (Пн) 16:45

Что значит использовать обычное меню? И что сложного в моем варианте? Все создается и запоняется парой-тройкой строчек кода.
А использование сабклассинга в моем случае недопустимо, поскольку в проекте нет модулей в принципе.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 02.02.2004 (Пн) 20:03

Итак, немного разобрался...
Нашел функцию для получения статуса меню:
Declare Function GetMenuState Lib "user32.dll" ( _
ByVal hMenu As Long, _
ByVal wID As Long, _
ByVal wFlags As Long) As Long

здесь все понятно

Также нашел функцию для получения строки меню:
Declare Function GetMenuString Lib "user32.dll" Alias "GetMenuStringA" ( _
ByVal hMenu As Long, _
ByVal wIDItem As Long, _
ByVal lpString As String, _
ByVal nMaxCount As Long, _
ByVal wFlag As Long) As Long

Вызываю: Call GetMenuString(hMenu, ID, TMP, 255, 0)
Но сразу вылетает VB :(
Что-то я не так наверно сделал...
------------------------------------------
Прошло некоторое время...

Немного покопался по различным MSDN и т.п. и обнаружил еще одну функцию: GetMenuItemInfo
Уже получил длину строки пункта, но как, <SENSORED>, выловить саму строку?

Какие будут мысли?

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 03.02.2004 (Вт) 1:12

Под обычным меню имелось ввиду стандартное меню, которое создается на форме, затем делается невидимым и вызывается методом Popupmenu.
А насчет твоего метода - как ты собираешься отлавливать нажатия на пунктах меню без сабклассинга? Ведь меню ты создал через АПИ, и соответственно никаких событий VB генерировать не будет.
Нет ничего невозможного для человека с интеллектом.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 03.02.2004 (Вт) 10:06

Само нажатие я элементарно отлавливаю через TrackPopupMenu
И узнаю индекс выбранного пунката, и длину ТЕКСТА, но сам текст выловить не могу.
По идее текст должен загрузится в переменную .dwTypeData после использования GetMenuItemInfo
Но я наверно че-то напутал с константами.
На счет обычного меню. Данные в нем постоянно меняются, поэтому проще динамично создавать и модифицировать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.02.2004 (Вт) 10:42

Так, отечественного производителя кто будет поддерживать? :lol:
http://bbs.vbstreets.ru/viewtopic.php?p=23266#23266
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 03.02.2004 (Вт) 11:14

GSerg, ты гений!
Вон оно как хитро запутано. Чтобы узнать строку, надо сначала у знать длину, добавить еденицу, после заполнить буфер пробелами$(длина), после еще раз вызывать GetMenuItemInfo

Спасибо! :wink:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.02.2004 (Вт) 16:35

Пожалуйста :)
И я не гений, просто msdn читать люблю :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList