|
Программирование >> Программирование на языке c++
Манипулятор мышь Левая кнопка, 1. Нажатие кнопки 3. Вьпов функции отклика Правая кнопка EvLBullonDown - 2. Этот вход таблипы откликов будет активизирован Здесь показано соответствие между макроименем таблицы откликов и именем функции отклика DEFINE > EV WM LBUTTONDOWN, EV WM RBUTTONDOWN, END... -* Тело функции , MessageBox( Yo pressed the left bullon ):,} Рис. 9.19. Пример обработки сообщений системы WINDOWS нажатии правой кнопки манипулятора мышь последовательность действий аналогичная. В системе ObjectWindows задано соответствие между поступающими от WINDOWS сообщениями, входами таблицы отклика и компонентами-функциями, реагирующими на сообщения (см. рис. 9.20). Для того чтобы записать правильное макроимя, используемое как вход в таблицу откликов, необходимо к сообщению WINDOWS добавить префикс EV . Чтобы определить имя соответствующей функции откликов, нужно удалить из макроимени символы WM и заменить заглавные буквы строчными, за исключением букв, с которых начинаются соответствующие английские слова. Использованные в программе функции EvLButtonDown и EvRButton-Down имеют следующие описания: Сообщения WINDOWS Макроимена таблицы отюшков Преобразования WM LBUTTONDOWN WM RBUTTONDOWN WM PAINT EV WM LBUTTONDOWN EV WM RBUTTONDOWN ] EV WM PAINT EV.jA.PAINT LBUTTONDOWN EV.y5RBUTTONDOWN Функции откликов EvLButlonDowii EvRBuUonDovwi EvPainl Результат ьреобразования Рис. 9.20. Соответствие между стандартными сообщениями системы WINDOWS, входами таблицы откликов и функциями откликов void EvLButtonDown(UINT modKey,TPoint& point); void EvRButtonDown{UlNT modKey,TPoint& point); Здесь modKey - соответствует флагу кнопки; point - объект, которьш хранит горизонтальную и вертикальную координаты точки главного окна, где была нажата левая кнопка манипулятора мышь . Эти координаты можно получить следующим образом: void my win :: EvLButtonDown(UINT,TPoint& point) { ciiar str[30]; wsprintf(str, x = %d, у = %d ,point.x, point.y); MessageBox(str); В этом фрагменте текущие горизонтальная (point.x) и вертикальная (point.y) координаты манипулятора мышь будут отображаться в окне сообщений. Функция wsprintf подобна функции sprintf языков C/C++. 9.3. Объекты, поддерживающие работу с различными окнами Различают следующие типы объектов, поддерживающих работу с окнами: > фреймы (типа TFrameWindow); Объекты, поддерживающие работу с различными окнами > планы (типа TLayoutWindow). Эти объекты осуществляют размещение различных окон в главном окне в соответствии с заданными ограничениями на их взаимное расположение; специальные фреймы (типа TDecoratedFrame); > фреймы, поддерживающие работу со многими документами (типа TMDIFrame); > фреймы, поддерживающие работу с картинками (типа TGadgetWindow). Иерархия основных классов, поддерживающих работу с окнами, показана на рцс. 9.5, б. Класс TGadgetWindow (не показанный на рис. 9.5) является производным классом от класса TWindow. Объекты этих классов используются для .построения и работы с интерфейсными элементами. Взаимосвязь между интерфейсным объектом и соответствующим интерфейсным элементом осуществляется через компонент-данное интерфейсного объекта с именем HWindow (см. рис. 9.8). Построение интерфейсного элемента включает три этапа: > конструирование соответствующего интерфейсного объекта; > установка атрибутов интерфейсного элемента; > создание интерфейсного элемента. Рассмотрим перечисленнью этапы более подробно (рис. 9.21). Этап 1. При конструировании объекта выделяется необходимая память, которая используется для хранения компонентов-данных и информации о виртуальных функциях. После выделения памяти некоторые данные имеют неопределенные значения (или значения, заданные по умолчанию). Например, значение переменной HWindow равно NULL (см. рис. 9.8). Этап 2. Здесь можно изменить значения атрибутов, заданных по умолчанию, В результате можно задать размеры и местоположение окна, присоединить меню, задать ускорители (или активные клавиши) и т. п. Класс TWindow имеет компо-нент-данное Attr (см. рис. 9.21) с атрибутом public, который передается потомкам этого класса. В свою очередь Attr - это объект типа TWindowAttr, который имеет следующую структуру (см. табл. 9.1):
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |