popup menu
От: GRiA  
Дата: 16.02.04 21:26
Оценка:
Действие происходит в 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++' — ПК
Re: popup menu
От: LMars Россия  
Дата: 17.02.04 04:13
Оценка: 4 (2)
Здравствуйте, 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.
Re[2]: popup menu
От: GRiA  
Дата: 17.02.04 10:15
Оценка:
Здравствуйте, LMars, Вы писали:

... можно и нужно использовать флаги TPM_NONOTIFY и TPM_RETURNCMD.

Спасибо огромное, правда я уже и сам разобрался. Ваше предложение ещё раз убедило меня в корректности этого метода. Что конечно совсем не лишнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.