Автор
|
Тема: Заркытие меню
|
SUnteXx |
опубликован 02-02-2002 00:57 MSK
/****************************************/ /* Смотрите также топик "Помогите, а то не доделать интерфейс!" (вопрос один и тотже:) /****************************************/Привет Олл! У меня трабла. Помогите, а то интерфейс не доделать! Как можно закрыть пункт меню и сразу же показать новый? Пробовал, как мне кажется, практически все от посылки сообщения о нажатии кнопки ESC, клики мыши, WM_MENUSELECT (wParam=MAKELONG(0,0xffff), lParam=0), пробовал WM_CANCELMODE, новое меню не показывается, ... - ничего не помогло! Хелп, ху ноу энд ху кэн! 2ADK: WTL не нашел у себя:( Может сможешь как-нить помочь? 2GE: Без обид! А вы чем порадуете? Может поможите и кините ссылку в MSDN, просто очень надо!
|
Flex Ferrum
|
опубликован 02-02-2002 01:05 MSK
А еще по подробнее можешь объяснить? Не совсем понял идею. Приведи пример. |
GE
|
опубликован 02-02-2002 01:07 MSK
Попробуйте Popup-menu |
SUnteXx
|
опубликован 02-02-2002 01:57 MSK
ОК! Я делаю, что если чел выбрал один пункт меню (показалось одно поп-ап), а потом перевел курсор на другой, то первое закрывалось, а второе показывалось! Popup-меню закрывается при клике крысы, при нажатии на Esc, ... Пробовал и то, и то - ничего не помогло!Мой вопрос заключается в том, что как закрыть прошлое меню и показать новое, просто если два раза подряд вызвать TrackPopupMenuEx, то покажется только первое меню, а не оба и не сначала первое, потом второе! Как быть. Надеюсь вопрос теперь ясен! |
Flex Ferrum
|
опубликован 02-02-2002 13:22 MSK
Но, ИМХО, стандартные виндовые менюхи именно так и работают - ты переводишь мышу с пункта на пункт - popup-меню меняется. Или ты делаешь свои собственные менюхи? Тогда почему они работают на стандартных сообщениях? |
SUnteXx
|
опубликован 03-02-2002 01:21 MSK
Дык я свои менюхи и делаю! Скоро возьмусь за тулбар:)ХЗ почему они работают на стандратных мессагах. Видать глупые, не обученные! Может самому рисовать менюхи, типа взял при наводе на пункт меню создал статик, нарисовал в нем все что надо (или вместо каждой строчки по статику), а потом уже ... Но, сначала, хочу разобраться с этой бодягой про закрытие! Третий день на исходе (у меня щаззз около 23:14), а них еще не получилось:( Может все-таки кто-нить откликнется. ЗЫ Где ж наш посылатель в MSDN мистер GE ? (БЕЗ ОБИД) Обиделись или поиск занял слишком много времени или метод поиска обламал ожидания или же все-таки порадуете ссылкой или из принципа не будете ничего делать и с гордостью задрав нос покините форум со словами: "Они там самые умные, пусть сами и разбираются"? |
Glite
|
опубликован 03-02-2002 03:13 MSK
Свои менюшки? Пример кода, для menubar'а http://www.codeguru.com/menu/offMenu.shtml. Похоже, что это как раз то, что ты и хочешь. |
Flex Ferrum
|
опубликован 03-02-2002 15:42 MSK
Брррр... Я вижу только два способа - либо рисвать свои собственные менюхи целиком и полностью, либо обрабатывай OWNERDRAW мессаги... |
arty
|
опубликован 03-02-2002 16:39 MSK
А по-моему всё гораздо проще. Я создавал своё поп-ап меню при помощи CreatePopupMenu. Как только оно создано и показано - TrackPopupMenu, оно не исчезнет, пока юзер не кликнет пункт. Если же нужно вызвать другое меню, то сначала нужно убить старое - DestroyMenu. Ну а потом уже создать новое - опять таки CreatePopupMenu. Я так делал, у меня работает. Удачи! |
SUnteXx
|
опубликован 04-02-2002 01:03 MSK
2arty: Мда, как же я забыл про DestroyMenu? Спасибо!:)Топик закрыт:) |
ADK
|
опубликован 04-02-2002 06:37 MSK
Блин, такой шорох SunteXX поднял, а всё так просто было... 2SunteXX может, пришлеёшь мне свой API интерфейсный проект поглядеть? |
ADK
|
опубликован 04-02-2002 06:38 MSK
Блин, такой шорох SunteXX поднял, а всё так просто было... 2SunteXX может, пришлеёшь мне свой API интерфейсный проект поглядеть? kourov@newmail.ru |
SUnteXx
|
опубликован 04-02-2002 00:14 MSK
Да, я не подумав залез в форум, забыл совсем про ф-цию! Даж стыдно:(Учеба - страшная вещь! 2ADK: Прогу тебе послал! |
SUnteXx
|
опубликован 05-02-2002 01:27 MSK
Шорох, шорох, а них не работает! Уж как не извращался, пробовал делать копию попап меню, показывать эту копию, потом при переводе на другой пункт удалить прошлый (DestroyMenu), сделать копию нового, показать, ....Них не работает! Если жмякаю на тот же пункт меню, то он не показывается, то ли клик был и меню убралось и хэндл стал пуст, то ли Вынь - отстой:( Может я что-то не так делаю! Вот сорс моей ф-ции показа меню: static HMENU hLastMenu = 0; void ShowSubMenu(HWND hWnd, HMENU hMenu, int i) // Моя ф-ция, где i - номер сабменю! { RECT r; HMENU hSubMenu; if (hLastMenu) { DestroyMenu(hLastMenu); hLastMenu = 0l; } hSubMenu = GetSubMenu(hMenu, i); // Получаем хэндл на сабменю GetMenuItemRect(hWnd, hMainMenu, i, &r); // получаем координаты, куда показывать HMENU hMenu1 = CreatePopupMenu(); // создаем пустой попап MENUITEMINFO mii; int iMax = GetMenuItemCount(hSubMenu); // получаем количество элементов в оригинале сабменю char sz[40] = {0}; for (int i1 = 0; i1 < iMax; i1++) //Здесь делаем копию меню { strnset(sz, sizeof(sz), '\0'); mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_DATA | MIIM_ID |MIIM_SUBMENU |MIIM_TYPE; mii.cch = 40; mii.fType = MFT_STRING; mii.fState = MFS_DEFAULT; mii.dwTypeData = sz; GetMenuItemInfo(hSubMenu, i1, 1, &mii); // получаем данные об элементе InsertMenuItem(hMenu1, i1, 1, &mii); // ставим элемент в новый попап } if (hMenu1) hLastMenu = hMenu1; TrackPopupMenuEx(hMenu1, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON | TPM_HORIZONTAL, r.left, r.top, hWnd, NULL); } Вот вроде бы все! Я не понимаю, что не так! Копию делаю для того, чтобы было что удалять!) С уважением, отчаявшийся SUnteXx:( |
ADK
|
опубликован 05-02-2002 05:40 MSK
Я тебе пошлю пример на WTL, где это сделано. Если захочешь, разберёшься. |
SUnteXx
|
опубликован 05-02-2002 11:54 MSK
Уже поймал:) |
SUnteXx
|
опубликован 06-02-2002 00:56 MSK
2ADK: Прмер поймал, но вот сорс бы:) В совей проге ты мне не послал один файл. Читай письмо:) |