Программирование для IBM OS/2© Александр Фролов, Григорий ФроловТом 25, М.: Диалог-МИФИ, 1993, 286 стр. 3.4. Плавающее менюПлавающие меню очень удобны для пользователя и широко используются на практике. Такие меню возникают на экране, как правило, когда пользователь делает щелчок правой клавишей мыши по какому-нибудь подходящему обекту или просто в окне приложения. Меню отображается недалеко от куросра мыши и поэтому им легко пользоваться. Обычно с помощью плавающих меню создают контекстные меню, состав строк котоых зависит от объекта, по которому был сделан щелчок правой клавишей мыши. Проще всего создать плавающее меню на базе шаблона, определенного в файле описания ресурсов приложения. Для этого нужно загрузить меню из ресурсов приложения при помощи функции WinLoadMenu , а затем, когда это потребуется, отобразить меню функцией WinPopupMenu : hwndPopupMenu = WinLoadMenu (hWnd, NULLHANDLE, POPUP_MENU); . . . WinPopupMenu (hWnd, hWnd, hwndPopupMenu, SHORT1FROMMP (mp1), SHORT2FROMMP (mp1), IDM_FILE_NEW, PU_POSITIONONITEM | PU_HCONSTRAIN | PU_VCONSTRAIN | PU_MOUSEBUTTON1 | PU_MOUSEBUTTON2 | PU_KEYBOARD); Прототип функции WinLoadMenu представлен ниже: HWND WinLoadMenu ( HWND hwndFrame, // родительское окно HMODULE hmod, // идентификатор ресурса HWND idMenu); // идентификатор окна меню Через параметр hwndFrame функции WinLoadMenu следует передать идентификатор окна Frame Window , которое станет родительским для загружаемого меню. Можно также указывать идентификаторы объектного окна HWND_OBJECT и окна рабочего стола HWND_DESKTOP . Параметр hmod должен содержать идентификатор модуля, из ресурсов которого загружается меню. В качестве такого модуля может выступать либо загрузочный файл приложения, либо библиотека динамической загрузки DLL. В первом случае значение параметра hmod может быть равно NULLHANDLE. Вторую возможность мы рассмотрим позже, когда будем рассказывать о библиотеках DLL. Параметр idMenu предназначен для передачи идентификатора меню, с которым это меню определено в файле описания ресурсов. При необходимости вы можете подготовить шаблон меню в оперативной памяти и затем загрузить его при помощи фукнции WinCreateMenu . Функция WinPopupMenu , при помощи которой выполняется отображение плавающего меню, имеет такой прототип: BOOL WinPopupMenu ( HWND hwndParent, // родительское окно HWND hwndOwner, // окно-владелец HWND hwndMenu, // идентификатор плавающего меню LONG x, // координата X для отображения меню LONG y, // координата Y для отображения меню LONG idItem, // идентификатор строки меню, // которая будет выбрана по умолчанию ULONG fs); // дополнительные параметры Через параметры hwndParent и hwndOwner этой функции необходимо передать, соответственно, идентификатор родительского окна и идентификатор окна-владельца. Последнее будет получать все извещающие сообщения от меню. Вы можете через оба этих параметра передать идентификатор главного окна вашего приложения Frame Window . Параметр hwndMenu предназначен для передачи идентификатора отображаемого плавающего меню, загруженного ранее при помощи функции WinLoadMenu . Через параметры x и y необходимо передать координаты, которые будут использованы для определения места отображения меню. Если плавающее меню отображается после щелчка левой или правой клавишей мыши, эти координаты имеет смысл сделать равными координатам курсора мыши в момент щелчка. Параметр idItem используется в зависимости от
значения дополнителных параметров fs.
Дополнительные параметры указываются как
комбинация следующих значений, которые можно
объединять при помощи логической операции ИЛИ:
Если плавающее меню отображено, функция WinPopupMenu возвращает значение TRUE. При ошибке возвращается значение FALSE. |