своими руками" память под объект,
Обработка сообщений 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 (от которого класс TPopupMenu является производным), в параметрах которой указывается тип каждого пункта меню (MF_STRING, текстовая строка), идентификатор и конкретный текст. Второй этап - активизация плавающего меню, т.е. вывод его на экран, осуществляется в функции EvRButtonDown() обработки сообщений от правой клавиши мыши. Здесь вызывается функция TrackPopupMenu() класса TPopupMenu, которой передается флаг позиционирования меню TPF_LEFTALIGN (задается положение левого края меню), конкретные координаты (переменная point) и дескриптор окна-владельца, в качестве которого используется открытый член класса TWindow HWindow, который получает свое значение (равное, между прочим, NULL) в процессе создания главного окна. Вместе с сообщением WM_RBUTTONDOWN в программу поступают текущие координаты курсора мыши относительно рабочей области окна приложения, однако функция TrackPopupMenu() выводит плавающее меню в координатах всего экрана. Для смещения меню к нашему окну в функции EvRButtonDown() объявляется прямоугольник rect класса TRect, вызовом функции GetWindowRect() в него засылаются текущие координаты окна приложения, и переменная point должным образом корректируется.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий