Программирование под Win32


           

своими руками" память под объект,


Обработка сообщений Windows                                                                                     253

Выделив " своими руками" память под объект, мы должны ее сами же и освободить; для этого мы за­мещаем еще и функцию CleanupWindow() класса TWindow. В замещающей функции мы сначала удаляем созданные ранее объект с указателем menu, а затем вызываем исходную, замещенную функцию (см. оп­ределение функции MyWindow::CleanupWindow()).

В таблицу откликов, входящую в класс MyWindow, включены макросы EV_COMMAND как для всех ' пунктов основного меню (CM_ABOUT, CM_SIN и др.), так и для плавающего меню задания масштаба (СМ_200, СМ_100 и СМ_50). Соответствующие функции обработки сообщений (Сm200 и др.) объявле­ны выше. В программе также предусмотрена обработка сообщений от правой клавиши мыши (макрос EV_WM_RBUTTONDOWN и функция с предопределенным именем EvRButtonDown()).

Образование плавающего меню распадается на два этапа. В конструкторе класса MyWindow мы за­полняем объявленный ранее и пока пустой объект popupMenu класса TPopupMenu конкретными строка­ми команд. Это делается с помощью функции AppendMenu() класса TMenu (от которого класс TPopup­Menu является производным), в параметрах которой указывается тип каждого пункта меню (MF_STRING, текстовая строка), идентификатор и конкретный текст. Второй этап - активизация пла­вающего меню, т.е. вывод его на экран, осуществляется в функции EvRButtonDown() обработки сообще­ний от правой клавиши мыши. Здесь вызывается функция TrackPopupMenu() класса TPopupMenu, кото­рой передается флаг позиционирования меню TPF_LEFTALIGN (задается положение левого края меню), конкретные координаты (переменная point) и дескриптор окна-владельца, в качестве которого использу­ется открытый член класса TWindow HWindow, который получает свое значение (равное, между прочим, NULL) в процессе создания главного окна. Вместе с сообщением WM_RBUTTONDOWN в программу поступают текущие координаты курсора мыши относительно рабочей области окна приложения, однако функция TrackPopupMenu() выводит плавающее меню в координатах всего экрана. Для смещения меню к нашему окну в функции EvRButtonDown() объявляется прямоугольник rect класса TRect, вызовом функ­ции GetWindowRect() в него засылаются текущие координаты окна приложения, и переменная point должным образом корректируется.


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий