Меню. Главные меню и всплывающие меню, страница 8

здается всплывающее меню, а затем отображается в координатах курсора мыши. На рис. 6.7 показано, как выглядит незакрепленное всплывающее меню.

TrackPopupMenuEx                             • Windows 98   • Windows 2000

 

Описание

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

 

Синтаксис

BOOL TrackPopupMenuEx( HMENU hMenu, UINT uFlags, int x, int y, HWND kwnd, LPTPMPARAMS Ipipm )

 

Параметры

 

hMenu

HMENU. Дескриптор всплывающего меню, которое должно быть отображено. Всплывающее меню можно создать, применив функцию CreatePopupMenu или вызвав функцию GetSubMenu для выборки дескриптора всплывающего меню, связанного с существующим пунктом меню.

 

и Flags

UINT. Указывает опции позиционирования и другие опции. Этот параметр может состоять из нуля или более флажков, перечисленных в табл. 6.18, которая приведена в описании функции TrackPopupMenu, и может также включать одно из значений, перечисленных в табл. 6.19.

 

Таблица 6.19. РасширенныйнаборзначенийпараметраuFlags функцииTrackPopupMenuEx

 

Значение

Описание

 

TPM_HORIZONTAL

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

 

TPM_VERTICAL

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

 

д:

int. Горизонтальное расположение всплывающего меню, заданное в экранных координатах.

 

У

int. Вертикальное расположение всплывающего меню, заданное в экранных координатах.

 

kwnd

HWND. Дескриптор окна, которому принадлежит всплывающее меню. Это окно принимает все сообщения от меню. Сообщение \VM_COMMAND не отправляется до тех пор, пока функция не выполнит возврат.

 

Iptpm

LPTPMPARAMS. Указатель на структуру TPMPARAMS. Эта структура указывает область экрана, на которую не должно накладываться меню.

 

Параметр Iptpm может принимать значение NULL. См. приведенное ниже определение структуры TPMPARAMS.

 

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

BOOL. Если указан флажок TPM_RETURNCMD, возвращаемое значение — пункт меню, который выбрал пользователь. Если пользователь отменил выбор пункта меню или произошла ошибка, возвращаемое значение — нуль. Если флажок TPM_RETURNCMD не указан и функция была выполнена успешно, возвращаемое значение отлично от нуля; в ином случае возвращаемое значение — нуль.

 

Включаемый файл

winuser.h

 

См. также

TrackPopupMenu, GetMenu, GetSubMenu, CreatePopupMenu

 

Соответствующие сообщения

 

WM_COMMAND

 

Определение TPMPARAMS

 

typedef   struct   tagTPMPARAMS

{

UINT   cbSize; RECT   rcExclude ; }    TPMPARAMS ,    *LPTPMPARAMS ;

 

Члены

 

cbSize

UINT. Размер структуры в байтах.

 

rcExdude

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

 

Пример

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

 

Са.    \local-sources\cbap06\06-27.txt

 

TranslateAccelerator                            • Windows 98   • Windows 2000

 

Описание

Комбинации оперативных клавиш определены в части ACCELERATOR файла ресурса (RC). Перед использованием таблицы оперативных клавиш необходимо выбрать дескриптор этой таблицы с помощью  функции LoadAccelerators. Для преобразования в цикле обработки сообщений программы введенных комбинаций в команды, указанные в таблице оперативных клавиш, применяется функция TranslateAccelerator, Оперативные клавиши могут применяться в качестве клавиатурных сокращений вместо команд меню. Их можно также использовать для отправки системе командных сообщений, не имеющих эквивалентов в меню. Если функция TranslateAccelerator возвращает ненулевое значение, это значит, что она успешно преобразовала комбинацию клавиш и отправила команду в функцию обработки сообщений программы. Приложение не должно позволять обычным функциям TranslateMessage и DispatchMessage повторно обрабатывать эти комбинации клавиш. Для предотвращения такой  ситуации  в цикле обработки  сообщений  программы  в функции WinMain применяется следующая структура.

 

while (   GetMessage(   Smsg,   NULL,    0,    0   )    )

{ if   (    !hAccel   I I    ! TranslateAccelerator (   hWnd,hAccel, Smsg   )    ) < TranslateMessage (   Smsg   ) ; DispatchMessage (   Smsg   ) ; > }

После преобразования оперативной клавиши сообщение отправляется непосредственно в функцию обработки сообщений программы, минуя очередь сообщений. Идентификационное значение оперативной клавиши отправляется в качестве параметра wParam сообщения WM_COMMAND (обычный случай) или сообщения \VM_SYSCOMMAND (если идентификационным значением является одно из идентификационных значений системного меню, перечисленных в табл. 6.10).

Синтаксис

int TranslateAccelerator( HWND hWnd, HACCEL haccl, LPMSG Ipmsg )

Параметры

hWnd

HWND. Дескриптор окна с функцией обработки сообщений (WndProc), которая должна принимать преобразованные сообщения. Обычно это — главное окно приложения.

haccl

HACCEL. Дескриптор таблицы оперативных клавиш, выбранный с применением функции LoadAccelerators или CreateAcceleratorTable.

Ipmsg

LPMSG. Указатель на структуру MSG. Эта структура содержит данные сообщения, полученные при вызове функции GetMessage.

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

int. TRUE, если значение комбинации клавиш было преобразовано в команду оперативной клавиши; в ином случае возвращаемое значение — FALSE.

Включаемый файл

winuser.h

См. также

CreateAcceleratorTable , LoadAccelerators

Соответствующие сообщения

WM_COMMAND, WM_SYSCOMMAND

Пример

См. пример для функции LoadAccelerators.