WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Заркытие меню

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Заркытие меню
SUnteXx опубликован 02-02-2002 00:57 MSK   Click Here to See the Profile for SUnteXx   Click Here to Email SUnteXx  
/****************************************/
/* Смотрите также топик "Помогите, а то не доделать интерфейс!" (вопрос один и тотже:)
/****************************************/

Привет Олл!
У меня трабла. Помогите, а то интерфейс не доделать! Как можно закрыть пункт меню и сразу же показать новый? Пробовал, как мне кажется, практически все от посылки сообщения о нажатии кнопки ESC, клики мыши, WM_MENUSELECT (wParam=MAKELONG(0,0xffff), lParam=0), пробовал WM_CANCELMODE, новое меню не показывается, ... - ничего не помогло! Хелп, ху ноу энд ху кэн!

2ADK:
WTL не нашел у себя:(
Может сможешь как-нить помочь?

2GE:
Без обид!
А вы чем порадуете? Может поможите и кините ссылку в MSDN, просто очень надо!

Flex Ferrum опубликован 02-02-2002 01:05 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А еще по подробнее можешь объяснить? Не совсем понял идею. Приведи пример.
GE опубликован 02-02-2002 01:07 MSK     Click Here to See the Profile for GE  Click Here to Email GE     
Попробуйте Popup-menu
SUnteXx опубликован 02-02-2002 01:57 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
ОК!
Я делаю, что если чел выбрал один пункт меню (показалось одно поп-ап), а потом перевел курсор на другой, то первое закрывалось, а второе показывалось! Popup-меню закрывается при клике крысы, при нажатии на Esc, ... Пробовал и то, и то - ничего не помогло!

Мой вопрос заключается в том, что как закрыть прошлое меню и показать новое, просто если два раза подряд вызвать TrackPopupMenuEx, то покажется только первое меню, а не оба и не сначала первое, потом второе! Как быть. Надеюсь вопрос теперь ясен!

Flex Ferrum опубликован 02-02-2002 13:22 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Но, ИМХО, стандартные виндовые менюхи именно так и работают - ты переводишь мышу с пункта на пункт - popup-меню меняется. Или ты делаешь свои собственные менюхи? Тогда почему они работают на стандартных сообщениях?
SUnteXx опубликован 03-02-2002 01:21 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Дык я свои менюхи и делаю! Скоро возьмусь за тулбар:)

ХЗ почему они работают на стандратных мессагах. Видать глупые, не обученные! Может самому рисовать менюхи, типа взял при наводе на пункт меню создал статик, нарисовал в нем все что надо (или вместо каждой строчки по статику), а потом уже ... Но, сначала, хочу разобраться с этой бодягой про закрытие! Третий день на исходе (у меня щаззз около 23:14), а них еще не получилось:(
Может все-таки кто-нить откликнется.

ЗЫ
Где ж наш посылатель в MSDN мистер GE ? (БЕЗ ОБИД) Обиделись или поиск занял слишком много времени или метод поиска обламал ожидания или же все-таки порадуете ссылкой или из принципа не будете ничего делать и с гордостью задрав нос покините форум со словами: "Они там самые умные, пусть сами и разбираются"?

Glite опубликован 03-02-2002 03:13 MSK     Click Here to See the Profile for Glite  Click Here to Email Glite     
Свои менюшки? Пример кода, для menubar'а
http://www.codeguru.com/menu/offMenu.shtml.
Похоже, что это как раз то, что ты и хочешь.
Flex Ferrum опубликован 03-02-2002 15:42 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Брррр... Я вижу только два способа - либо рисвать свои собственные менюхи целиком и полностью, либо обрабатывай OWNERDRAW мессаги...
arty опубликован 03-02-2002 16:39 MSK     Click Here to See the Profile for arty  Click Here to Email arty     
А по-моему всё гораздо проще. Я создавал своё поп-ап меню при помощи CreatePopupMenu.
Как только оно создано и показано - TrackPopupMenu, оно не исчезнет, пока юзер не кликнет пункт. Если же нужно вызвать другое меню, то сначала нужно убить старое - DestroyMenu. Ну а потом уже создать новое - опять таки CreatePopupMenu. Я так делал, у меня работает. Удачи!
SUnteXx опубликован 04-02-2002 01:03 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
2arty:
Мда, как же я забыл про DestroyMenu?
Спасибо!:)

Топик закрыт:)

ADK опубликован 04-02-2002 06:37 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Блин, такой шорох SunteXX поднял, а всё так просто было... 2SunteXX может, пришлеёшь мне свой API интерфейсный проект поглядеть?
ADK опубликован 04-02-2002 06:38 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Блин, такой шорох SunteXX поднял, а всё так просто было... 2SunteXX может, пришлеёшь мне свой API интерфейсный проект поглядеть? kourov@newmail.ru
SUnteXx опубликован 04-02-2002 00:14 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Да, я не подумав залез в форум, забыл совсем про ф-цию! Даж стыдно:(

Учеба - страшная вещь!

2ADK:
Прогу тебе послал!

SUnteXx опубликован 05-02-2002 01:27 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Шорох, шорох, а них не работает! Уж как не извращался, пробовал делать копию попап меню, показывать эту копию, потом при переводе на другой пункт удалить прошлый (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     Click Here to See the Profile for ADK  Click Here to Email ADK     
Я тебе пошлю пример на WTL, где это сделано. Если захочешь, разберёшься.
SUnteXx опубликован 05-02-2002 11:54 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Уже поймал:)
SUnteXx опубликован 06-02-2002 00:56 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
2ADK:
Прмер поймал, но вот сорс бы:)
В совей проге ты мне не послал один файл. Читай письмо:)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.