Функция 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_LEFTBUTTON | Если этот флажок установлен, пользователь может выбрать пункт меню только левой кнопкой мыши. |
|
Если этот флажок установлен, пользователь может выбрать пункт меню и левой, и правой кнопкой мыши. |
Значение | Предназначение |
|
Анимирует меню справа налево. |
|
Анимирует меню слева направо. |
|
Показывает меню без анимации. |
|
Анимирует меню снизу вверх. |
|
Анимирует меню сверху вниз . |
x
[in] Определяет горизонтальное расположение контекстного меню, в экранной системе координат.y
[in] Определяет вертикальное расположение контекстного меню, в экранной системе координат.nReserved
Зарезервировано; должно быть, ноль.hWnd
[in] Дескриптор окна, которое владеет контекстным меню. Это окно принимает все сообщения от меню. Окно не получает сообщение WM_COMMAND от меню до тех пор, пока функция не возвратит значение. Если Вы устанавливаете в параметре uFlags флажок TPM_NONOTIFY , функция не отправляет сообщения окну, идентифицированному hWnd. Тем не менее, Вы должны все же переправлять дескриптор окна в hWnd. Это может быть любой дескриптор окна вашей прикладной программы.
prcRect
Игнорируется.Возвращаемые значения
Если пользователь закрывает меню, не делая выбор, или если происходит ошибка, тогда величина возвращаемого значения - нуль.
Если Вы в параметре 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); |
Пример
Пример смотри в статье Показ на экране контекстного меню.
Смотри также
Краткий обзор Меню, CreatePopupMenu, GetSubMenu, TrackPopupMenuEx, WM_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 |
Нет |
Замечания по платформе |
Не имеется |