Обработка динамического меню в модальном диалоге
От:
Женя
Дата: 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);
}
но как я очень скоро выяснил — с модальными диалогами это не прокатывает...
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить