Вопро про меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zubik
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 07.08.2006 (Пн) 15:54

Вопро про меню

Сообщение Zubik » 31.08.2006 (Чт) 21:58

Бьюсь над динамическим меню своими силами, получилось его создать, через сабклассинг привязать к пунктам события на щелчок.

Но вот другая проблема, мне нужно при нажатии на пункт меню выделить его галочкой, а при последующем нажатии на этот же пункт - сбросить галку.

Сначало я формирую структуру "info" при обработке сообщения WM_MENUSELECT над каждым пунктом меню (с помощью ф-ции GetMenuItemInfo).
Затем обрабатываю сообщение WM_COMMAND

Создал процедуру, обрабатываемую при WM_COMMAND (при щелче на нужном пункте):

......

if info.fState = MFS_UNCHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_CHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
Exit Sub
End If

if info.fState = MFS_CHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_UNCHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
End If

........

Получается, что при щелчке галочка на пункте ставится, а при следующем клике - не сбрасывается.

Скорее всего - чтото не правильно, только что? Подскажите плиз.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 31.08.2006 (Чт) 22:19

Полный код давай, в архиве. Тогда над ним можно будет пошаманить. Я навскидку сказать не могу, а у нашего телепата кончились деньги и в инете он почти не появляется.
Изображение

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 31.08.2006 (Чт) 22:53

Советую исследовать следующий пример:

http://bbs.vbstreets.ru/download.php?id=1052

Zubik
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 07.08.2006 (Пн) 15:54

Сообщение Zubik » 01.09.2006 (Пт) 21:04

Ребята, спасибо за советы... но я сегодня утром пришёл на работу.. и понял в чем причина. Всё оказалось банально просто :о)
исправил ошибку и всё получилось:

раньше:
if info.fState = MFS_UNCHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_CHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
Exit Sub
End If

if info.fState = MFS_CHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_UNCHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
End If

исправлено:
if info.fType = MFS_UNCHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_CHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
Exit Sub
End If

if info.fType = MFS_CHECKED then
info.fMask = MIIM_STATE
info.fType = MFS_UNCHECKED
SetMenuItemInfo hMenu, идент. пункта меню (беру из ф-цииWndProc), 0, info
End If

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 07.09.2006 (Чт) 11:42

А целеком исходник этой хрени не мог бы выложить?


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 138

    TopList