Обработка динамического меню в модальном диалоге
От: Женя Россия  
Дата: 07.03.08 11:17
Оценка:
По нажатию кнопки из основного окна вызывается модально диалог:
class CTelDirDlg :
public CDialogImpl<CTelDirDlg>,
public CWinDataExchange<CTelDirDlg>{ <...> }

У диалога по событитю создается динамически всплывающее меню и показывается пользователю:

CMenu pMenu;
pMenu.CreatePopupMenu();
UINT_PTR i = ID_FIRST_MENU_ITEM;
for(TelList::iterator iter = telList->begin(); iter != telList->end(); iter++) {
// строим строку item
pMenu.AppendMenu(MF_STRING, i++, (LPCTSTR)item);
}
CPoint posMouse;
GetCursorPos(&posMouse);
pMenu.TrackPopupMenu(0, posMouse.x, posMouse.y, m_hWnd);

Заранее неизвестно количество строк создаваемого меню.

Вопрос: как обработать выбор опции меню?

Был вариант с PreTranslateMessage:

BOOL CTelDirDlg::PreTranslateMessage(MSG *pMsg) {

if (pMsg->message == WM_COMMAND && LOWORD(pMsg->wParam) >= ID_FIRST_MENU_ITEM) {

int idx = LOWORD(pMsg->wParam) — ID_FIRST_MENU_ITEM;
// обрабатываем...
EndDialog(IDOK);
return TRUE;
}
return IsDialogMessage(pMsg);
}

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