Функция TrackPopupMenuEx (winuser.h)
Отображает контекстное меню в указанном расположении и отслеживает выбор элементов в контекстном меню. Контекстное меню может появиться в любом месте экрана.
Синтаксис
BOOL TrackPopupMenuEx(
[in] HMENU hMenu,
[in] UINT uFlags,
[in] int x,
[in] int y,
[in] HWND hwnd,
[in, optional] LPTPMPARAMS lptpm
);
Параметры
[in] hMenu
Тип: HMENU
Дескриптор контекстного меню для отображения. Этот дескриптор можно получить, вызвав функцию CreatePopupMenu для создания контекстного меню или вызвав функцию GetSubMenu для извлечения дескриптора во вложенное меню, связанное с существующим элементом меню.
[in] uFlags
Тип: UINT
Задает параметры функции.
Используйте один из следующих флагов, чтобы указать, как функция размещает контекстное меню по горизонтали.
Используйте один из следующих флагов, чтобы указать, как функция располагает контекстное меню по вертикали.
Используйте следующие флаги для управления обнаружением выбора пользователя без настройки родительского окна для меню.
Используйте один из следующих флагов, чтобы указать, какую кнопку мыши отслеживает контекстное меню.
Используйте любое разумное сочетание следующих флагов, чтобы изменить анимацию меню. Например, выбрав горизонтальный и вертикальный флаги, можно добиться диагональной анимации.
Для любой анимации функция SystemParametersInfo должна задать SPI_SETMENUANIMATION. Кроме того, все флаги TPM_*ANIMATION , кроме TPM_NOANIMATION, игнорируются, если включена анимация затухания меню. Дополнительные сведения см. в разделе Флаг SPI_GETMENUFADE в SystemParametersInfo.
Используйте флаг TPM_RECURSE для отображения меню, когда уже отображается другое меню. Это предназначено для поддержки контекстных меню в меню.
Используйте один из следующих флагов, чтобы указать, следует ли размещать горизонтальное или вертикальное выравнивание.
Исключенный прямоугольник — это часть экрана, на которую меню не должно перекрываться; он задается параметром lptpm .
Для разметки текста справа налево используйте TPM_LAYOUTRTL. По умолчанию макет текста слева направо.
[in] x
Тип: int
Горизонтальное расположение контекстного меню в координатах экрана.
[in] y
Тип: int
Вертикальное расположение контекстного меню в координатах экрана.
[in] hwnd
Тип: HWND
Дескриптор окна, которому принадлежит контекстное меню. Это окно получает все сообщения из меню. Окно не получает сообщение WM_COMMAND из меню, пока функция не вернет. Если указать TPM_NONOTIFY в параметре fuFlags , функция не отправляет сообщения в окно, определенное hwnd. Однако по-прежнему необходимо передать дескриптор окна в hwnd. Это может быть любой дескриптор окна из приложения.
[in, optional] lptpm
Тип: LPTPMPARAMS
Указатель на структуру TPMPARAMS , указывающую область экрана, которую меню не должно перекрывать. Этот параметр может принимать значение NULL.
Возвращаемое значение
Тип: BOOL
Если указать TPM_RETURNCMD в параметре fuFlags , возвращаемое значение будет идентификатором элемента меню, выбранного пользователем. Если пользователь отменяет меню без выбора или возникает ошибка, возвращаемое значение равно нулю.
Если не указать TPM_RETURNCMD в параметре fuFlags , возвращаемое значение будет ненулевым, если функция выполнена успешно, и нулевым значением в случае сбоя. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Вызовите GetSystemMetrics с SM_MENUDROPALIGNMENT , чтобы определить правильный флаг горизонтального выравнивания (TPM_LEFTALIGN или TPM_RIGHTALIGN) и (или) флаг направления горизонтальной анимации (TPM_HORPOSANIMATION или TPM_HORNEGANIMATION), чтобы передать его в TrackPopupMenu или TrackPopupMenuEx. Это важно для создания оптимального взаимодействия с пользователем, особенно при разработке приложений для планшетов Майкрософт.
Чтобы отобразить контекстное меню для значка уведомления, текущее окно должно быть окном переднего плана, прежде чем приложение вызовет TrackPopupMenu или TrackPopupMenuEx. В противном случае меню не исчезнет, когда пользователь щелкает за пределами меню или окна, создавшего меню (если оно отображается). Если текущее окно является дочерним, необходимо задать родительское окно (верхнего уровня) в качестве окна переднего плана.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-menu-l1-1-1 (появилось в Windows 8.1) |
См. также раздел
Основные понятия
Справочные материалы