Функция TrackPopupMenu

Функция TrackPopupMenu показывает на экране контекстное меню в заданном месте и устанавливает подбор пунктов меню. Контекстное меню может появиться в любом месте экрана.

Синтаксис

BOOL TrackPopupMenu(
    HMENU hMenu,
    UINT uFlags,
    int x,
    int y,
    int nReserved,
    HWND hWnd,
    HWND prcRect
); 

Параметры

hMenu

[in] Дескриптор контекстного меню, которое показывается на экране. Дескриптор может быть получен путем вызова CreatePopupMenu, чтобы создать новое контекстное меню или путем вызова GetSubMenu, чтобы извлечь дескриптор подменю, связанный с существующим пунктом меню.

uFlags

[in] Используйте нуль, а не эти флажки, чтобы определить параметры функции 

Используйте один из следующих  флажков, чтобы определить, как функция установит контекстное меню по горизонтали.

Значение Предназначение
TPM_CENTERALIGN Если этот флажок установлен, функция выравнивает по центру горизонтали контекстное меню, относительно координаты, определяемой параметром x
TPM_LEFTALIGN Если этот флажок установлен, функция устанавливает контекстное меню так, чтобы его левая сторона была выровнена по координате, определяемой параметром x
TPM_RIGHTALIGN Устанавливает контекстное меню так, чтобы правая сторона была выровнена по координате, определяемой параметром x

Используйте один из следующих  флажков, чтобы определить, как функция установит контекстное меню по вертикали.

Значение Предназначение
TPM_BOTTOMALIGN Если этот флажок установлен, функция располагает контекстное меню так, чтобы его нижняя сторона выровнялась с координатой, заданной параметром y
TPM_TOPALIGN Если этот флажок установлен, функция располагает контекстное меню так, чтобы его верхняя сторона выровнялась с координатой, заданной параметром y
TPM_VCENTERALIGN Если этот флажок установлен, функция выравнивает по центру вертикали контекстное меню, относительно координаты, заданной параметром y
Используйте ниже следующее флажки, чтобы обусловить выбор пользователя, без вызова родительского окна для меню.
Значение Предназначение
TPM_NONOTIFY
Если этот флажок установлен, функция не отправляет уведомительные сообщения, когда пользователь щелкает кнопкой мыши по пункту меню. 
TPM_RETURNCMD
Если этот флажок установлен, функция возвращает значение идентификатора пункта меню, выбранного пользователем. 

Используйте один из следующих  флажков, чтобы определить, какой кнопкой мыши установится контекстное меню:
Значение Предназначение
TPM_LEFTBUTTON Если этот флажок установлен, пользователь  может выбрать пункт меню только левой кнопкой мыши. 
TPM_RIGHTBUTTON
Если этот флажок установлен, пользователь  может выбрать пункт меню и левой, и правой кнопкой мыши. 
Windows 98/Me, Windows 2000/XP: Используйте любую разумную комбинацию ниже следующее флажков, чтобы изменить анимацию меню. Например, выбирая флажок горизонтали и вертикали  Вы можете достигнуть диагональной анимации.
 Значение Предназначение
TPM_HORNEGANIMATION
Анимирует меню справа налево. 
TPM_HORPOSANIMATION
Анимирует меню слева направо. 
TPM_NOANIMATION
Показывает меню без анимации. 
TPM_VERNEGANIMATION
Анимирует меню снизу вверх.
TPM_VERPOSANIMATION
Анимирует меню сверху вниз . 
Чтобы произошла какая-либо анимация,  функция SystemParametersInfo должна установить флажок SPI_SETMENUANIMATION. К тому же, все TPM_*ANIMATION флажки, кроме TPM_NOANIMATION, игнорируются, если включена плавная анимация меню. См. флажок SPI_GETMENUFADE в функции SystemParametersInfo.
Windows 98/Me, Windows 2000/XP: Используйте флажок TPM_RECURSE, чтобы показать на экране меню, когда другое меню еще не отображено. Это предназначается, чтобы поддержать контекстные меню без основного меню.
Windows XP: Чтобы получить ориентацию текста  справа налево, используйте флажок TPM_LAYOUTRTL. По умолчанию, ориентация текста - слева направо.

x

[in] Определяет горизонтальное расположение контекстного меню, в экранной системе координат.

y

[in] Определяет вертикальное расположение контекстного меню, в экранной системе координат.

nReserved

Зарезервировано; должно быть, ноль.

hWnd

[in] Дескриптор окна, которое владеет контекстным меню. Это окно принимает все сообщения от меню. Окно не получает сообщение WM_COMMAND от меню до тех пор, пока функция не возвратит значение. Если Вы устанавливаете в параметре uFlags флажок TPM_NONOTIFY , функция не отправляет сообщения окну, идентифицированному hWnd. Тем не менее, Вы должны все же переправлять дескриптор окна в hWnd. Это может быть любой дескриптор окна  вашей прикладной программы.

prcRect

Игнорируется.

Возвращаемые значения

Если Вы в параметре uFlags устанавливаете флажок TPM_RETURNCMD , возвращаемое значение - идентификатор пункта меню, который пользователь выбрал. 

Если пользователь закрывает меню, не делая выбор, или если происходит ошибка, тогда величина возвращаемого значения - нуль.

Если Вы в параметре uFlags не устанавливаете флажок TPM_RETURNCMD , величина возвращаемого значения - не нуль, если функция завершается успешно и нуль, если она завершается ошибкой. Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError.

Замечания

Чтобы задать область экрана, где меню не должно перекрываться, используйте функцию TrackPopupMenuEx.

Чтобы показать на экране контекстное меню для значка предупреждения, текущее окно должно быть приоритетным окном прежде, чем приложение вызовет функцию TrackPopupMenu или TrackPopupMenuEx. В противном случае, меню не будет исчезать, когда пользователь щелкает кнопкой мыши вне меню или вне окна, которое создавало меню (если оно видимо). Однако, когда текущее окно - приоритетное окно, меню отображается второй раз, оно показывается на экране и затем немедленно исчезает. Чтобы исправить это, Вы должны заставить переключатель задач  приложения, чтобы произошел вызов функции TrackPopupMenu в любое время в ближайшем будущем. Это делается при помощи пересылки неопасного сообщение  окну или потоку, как показано в примере кода ниже:

Демонстрационный пример

   SetForegroundWindow(hDlg);

   // Показываем на экране меню
   TrackPopupMenu(   hSubMenu,
                     TPM_RIGHTBUTTON,
                     pt.x,
                     pt.y,
                     0,
                     hDlg,
                     NULL);

   PostMessage(hDlg, WM_NULL, 0, 0);
 

Пример

Пример смотри в статье Показ на экране контекстного меню

Смотри также

Краткий обзор МенюCreatePopupMenuGetSubMenu, TrackPopupMenuExWM_COMMAND

Размещение и совместимость TrackPopupMenu

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz