Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание обработчика сообщения в элементе ActiveX
В элементах ActiveX сообщения обрабатываются точно так же, как и в остальных программах, — воспользуйтесь ClassWizard и создайте в нашем элементе обработчик для сообщения WM_LBUTTONDOWN. Метод OnLButtonDown()в коде для элемента ActiveX выглядит так: void CBoxerCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: добавьте код обработки сообщения // и/или вызовите обработчик по умолчанию COleControl::OnLButtonDown(nFlags, point); } Мы должны определить, в каком из четырех прямоугольников щелкнул пользователь, и закрасить этот прямоугольник — для этого в заголовочном файле CBoxerCtL.h объявляются четыре новые переменные (они будут выполнять функции флагов): class CBoxerCtrl: public COleControl { // Реализация protected: CBoxerCtrl(); CRect box1; CRect box2; CRect box3; CRect box4; boolean fill1; boolean fill2; boolean fill3; boolean fill4; В конструкторе элемента им присваиваются значения false: CBoxerCtrl::CBoxerCtrl() { InitializeIIDs(&IID_DBoxer, &IID_DBoxerEvents); fill1 = fill2 = fill3 = fill4 = false; } B методе OnLButtonDown() можно установить значения флагов с помощью удобного метода PtInRect() класса CRect. Он возвращает "true" если точка-параметр принадлежит прямоугольнику (в нашем случае прямоугольникам box1-box4): void CBoxerCtrl::OnLButtonDown(UINT nFlags, CPoint point) { fill1 == boxl.PtInRect(point); fill2 = box2.PtInRect(point); fill3 = box3.PtInRect(point); fill4 = box4.PtInRect(polnt); Invalidate(); COleControl::OnLButtonDown(nFlags, point); } После установки флага для прямоугольника, на котором щелкнул пользователь, мы вызываем перерисовку вида методом Invalidate(). Это приводит к вызовуOnDraw(), в котором проверяются все четыре флага и необходимый прямоугольник закрашивается методом FillSolidRect()класса CDC: void CBoxerCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rclnvalid) { pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); box1 = CRect(rcBounds.left, rcBounds.top, rcBounds.right/2, rcBounds.bottom/2); box2 = CRect(rcBounds.left, rcBounds.bottom/2, rcBounds.right/2, rcBounds.bottom); box3 == CRect(rcBounds.right/2, rcBounds.top, rcBounds.right, rcBounds.bottom/2); box4 = CRect(rcBounds.right/2, rcBounds.bottom/2, rcBounds.right. rcBounds.bottom); pdc->Rectangle(&box1) pdc->Rectangle(&box2) pdc->Rectangle(&box3) pdc->Rectangle(&box4); if(fill1) pdc->FillSolidRect(&box1,RGB(0,0,0)); if(fill2) pdc->FillSolidRect(&box2,RGB(0,0,0)); if(flll3) pdc->FillSolidRect(&box3,RGB(0,0,0)); if(fill4) pdc->FillSolidRect(&box,RGB(0,0,0)); } Программа готова, можно приступать к тестированию. Тестирование элемента ActiveX Чтобы проверить работу элемента Boxer, выполните команду Build > Build Boxer.ocx(управляющие элементы ActiveX получают расширение .осх) — элемент создается и регистрируется в Windows. Затем выполните команду Tools > ActiveX Control Test Container. Запускается чрезвычайно полезная программа "тестовый контейнер" Выполните в тестовом контейнере команду Edit >- Insert OLE Controlи дважды щелкните на строкеBoxer controlв окне Insert OLE Control. В результате наш элемент ActiveX появится в контейнере. Щелкните в любом прямоугольнике — он закрашивается черным цветом. Если щелкнуть в другом прямоугольнике, черным станет он. Элемент работает так, как мыхотели,а сейчас мы попытаемся вставить его в программу. Использование элемента ActiveX в программе на Visual C++ Давайте посмотрим, как созданный элемент будет работать в программе, написанной на Visual C++. С помощью AppWizard создайте программу на базе диалогового окна и назовите ее Вохегарр. В нее можно вставить элемент типа Boxer - выполните команду Project >- Add To Project > Components and Controls, и откроется окно Components and Controls Gallery. Дважды щелкните на строке Registered ActiveX Controls, чтобы вывести список всех доступных элементов ActiveX. Выделите строку Boxer Control и нажмите кнопку Insert. Появляется диалоговое окно с вопросом, желаете ли вы вставить элемент в свою программу; нажмите кнопку ОК. Затем откроется окно Confirm Class, сообщающее о создании нового класса СВохег. Снова нажмите кнопку ОК и закройте окно Components and Controls Gallery. Элемент Boxer появится в палитре редактора диалоговых окон. Он представлен кнопкой с буквами ОСХ. ПОДСКАЗКА: Чтобы изменить внешний вид элемента ActiveX в палитре, дважды щелкните в Visual C++ на идентификаторе растрового ресурса ID_BOXER — значок откроется в редакторе растровых изображений, и вы сможете отредактировать его по своему усмотрению. Элемент Boxer, как и любой другой управляющий элемент, можно разместить в главном диалоговом окне программы. Запустите программу. Как видите, элемент ActiveX присутствует в программе и работает так, как ему положено. Вы можете как угодно щелкать на прямоугольниках, и каждый раз выбранный вами прямоугольник будет закрашиваться. Итак, мы успешней создали свой первый элемент ActiveX. Мы посмотрели, как создать элемент ActiveX и организовать его прорисовку. Однако на этом возможности ActiveX отнюдь не исчерпываются — управляющие элементы могут также обладать событиями, методами и свойствами. Сейчас мы познакомимся с этой темой подробнее. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 307. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |