Действие происходит в VC++7. Создаю динамически меню вот так:
.......
CMenu* menu = new CMenu;
if (!menu->CreatePopupMenu()){
TRACE0("Меню не создано\n");
return -1;
}
//тут заполняются в меню добавляются разные пункты
ClientToScreen(&point);
BOOL test = menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x,point.y,this);
//вот тут мне надо узнать, какой пункт меню был выбран
menu->DestroyMenu();
delete menu;
........

Ну никак не могу узнать, какой пункт меню был выбран.
17.02.04 00:51: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, GRiA, Вы писали:
GRA>BOOL test = menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x,point.y,this);
GRA>//вот тут мне надо узнать, какой пункт меню был выбран
Про функцию CMenu::TrackPopupMenu() в МСДНе не написано, что такое возможно, но если использовать WinAPI...
UINT uSelect = (UINT)TrackPopupMenu( menu->GetSafeHmenu()
, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD
, point.x, point.y, 0, this, 0 );
if( 0 == uSelect )
;//юзер ничего не выбрал
else
{
//uSelect - идентификатор позиции в меню
}
... можно и нужно использовать флаги TPM_NONOTIFY и TPM_RETURNCMD.
Здравствуйте, LMars, Вы писали:
... можно и нужно использовать флаги TPM_NONOTIFY и TPM_RETURNCMD.
Спасибо огромное, правда я уже и сам разобрался. Ваше предложение ещё раз убедило меня в корректности этого метода. Что конечно совсем не лишнее.