Шаг 187- Всплывающее меню Popup

Попробуем создать меню, которое частенько появлется при нажатии правой кнопки мыши... Так называемое всплывающее меню.

В файле ресурсов необходимо создать меню. Для этого перейти на вкладку Resource и Меню Insert, далее New Resource из списка выберите меню. Присвоить ему имя IDR_MENUPOPUP.

Вы уже должны знать как нужно создавать меню (см. "Шаг 6 - Создание меню"). Но здесь надо обратить внимание на маленькую тонкость - создаем наше меню как подменю основного выпадающего меню, которое можно оставить пустым:

187_1.gif (739 b)

Возьмем реакцию на щелчок левой кнопкой мыши. И изменим процедуру реакции.

BOOL CMyDlg::OnInitDialog()
{
        m_PopupMenu.LoadMenu(IDR_MENUPOPUP);
        ASSERT(m_PopupMenu!=NULL);
}

void CMyDlg::OnSelect()
{
        CPoint point;
        GetCursorPos(&point);
        m_PopupMenu.GetSubMenu(0)->TrackPopupMenu(
                TPM_LEFTALIGN|TPM_LEFTBUTTON,
                point.x, point.y, this);
 }

Сейчас вам уже должны быть прозрачны почти все действия. Остановимся на функции OnSelect(), которая вызывается в подходящий для нас момент. Первоначально нам надо узнать, в каком месте показывать меню, для этого определяем объект CPoint point и берем текущее положение курсора GetCursorPos(&point). Теперь все готово, чтобы показать на экране наше меню. Для этого вызываем функцию m_PopupMenu.GetSubMenu(0), которая возвращает указатель на наш пустой пункт меню, и тут же его применяем по назначению вызвав функцию TrackPopupMenu, первый параметр задает в некотором роде выравнивание, второй и третий - координаты появления, четвертый - родителя, необязательный пятый параметр определяется структурой CRECT, и задает область видимости (то есть куда можно ткнуть).

Шаг прислал sadhan.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.