Операционная система Microsoft Windows 3.1 для программиста -том 3


Плавающее меню


При необходимости ваше приложение может создать временное плавающее меню , расположенное в любом месте экрана (рис. 1.7).

В приложении SMARTPAD мы создаем плавающее меню, когда пользователь нажимает в окне редактирования текста правую клавишу мыши. Процедура создания меню выглядит следующим образом:

if(msg == WM_RBUTTONDOWN) { HMENU hmenuPopup; POINT pt;

pt = MAKEPOINT(lParam); ClientToScreen(hwnd, &pt);

hmenuPopup = CreatePopupMenu();

AppendMenu(hmenuPopup, MF_BYCOMMAND | MF_ENABLED, CM_FILENEW, "&New"); AppendMenu(hmenuPopup, MF_BYCOMMAND | MF_ENABLED, CM_FILEOPEN, "&Open"); AppendMenu(hmenuPopup, MF_BYCOMMAND | MF_ENABLED, CM_FILESAVE, "&Save"); AppendMenu(hmenuPopup, MF_SEPARATOR, 0, 0); AppendMenu(hmenuPopup, MF_BYCOMMAND | MF_ENABLED, CM_FILEEXIT, "E&xit");

TrackPopupMenu(hmenuPopup, TPM_CENTERALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwndMain, NULL);

DestroyMenu(hmenuPopup); }

Обработчик сообщения WM_RBUTTONDOWN, которое приходит, если вы нажимаете правую клавишу мыши, прежде всего преобразует координаты курсора мыши в экранные. Для этого он вызывает функцию ClientToScreen .

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

TrackPopupMenu(hmenuPopup, TPM_CENTERALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwndMain, NULL);

Эта функция выводит на экран плавающее меню и создает свой собственный цикл обработки сообщений, завершающий работу после выбора строки. Поэтому функция TrackPopupMenu не возвращает управление до тех пор, пока работа с меню не будет завершена либо выбором строки, либо отказом от выбора.

После этого созданное временное меню уничтожается:

DestroyMenu(hmenuPopup);

Приведем прототип функции TrackPopupMenu :




Начало  Назад  Вперед