Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание элемента ActiveX на базе кнопки
Следующий пример демонстрирует ряд новых аспектов программирования ActiveX, например, возможность создания элементов на базе существующих управляющих элементов (например, кнопок). Мы также увидим, как организовать в элементах ActiveX поддержку событий — программа, в которую внедрен такой элемент, сможет обработать событие так же, как любое сообщение Windows. В нашем случае элемент будет называться Buttonerи поддерживать событие Click. Присутствующий в программе метод-обработчик (скажем, OnClickButtonerctrl1()) будет вызываться при щелчке мышью внутри элемента. Кроме того, в новом примере будут поддерживаться методы элементов ActiveX — в частности, мы включим в него метод Веер(). В других программах при помощи ClassWizard вы сможете создавать переменные, связанные с нашим элементом (например, m_buttoner), и вызывать метод с помощью записи типаm_buttoner.Веер(). Наконец, мы рассмотрим свойства элементов ActiveX. В нашем примере будет поддерживаться свойство с именем data. В нем будет храниться количество щелчков мышью, сделанных на элементе. Существует два способа обращения к свойству dataиз других программ: можно либо разрешить ссылаться на свойство в записи типа m_buttoner.data и непосредственно читать и присваивать значение этого свойства, либо воспользоваться более надежным способом и предоставить специальные методы для обращения к свойству. В этом случае другая программа должна вызывать методm_buttoner.SetData(), чтобы присвоить значение свойству, и m_buttoner.GetData(), чтобы получить его. Использование методов для доступа более надежно, поскольку присваиваемое значение можно предварительно проверить. В нашем примере будет использоваться именно этот вариант. Создайте программу Buttoner с помощью ControlWizard. Во втором окне Control Wizard выберите строку BUTTONиз раскрывающегося списка под вопросомWhich window class, if any, should this control subclass?(Какой оконный класс, если таковой существует, должен субклассировать данный элемент?), и завершите создание элемента кнопкой Finish. В программировании элементов ActiveXтакая методика называется субклассированием. Можно приступать к настройке элемента Buttoner. Настройка элемента Buttoner Пока что наш новый элемент ActiveX выглядит, как пустая кнопка, однако мы можем настроить его внешний вид и поместить на него надпись, например "Нажми меня!". Мы сделаем это в конструкторе элемента, расположенном в файле ButtonerCtL.cpp: CButtonerCtrl::CButtonerCtrl() { InitiallzeIIDs(&IID_DButtoner, &IID_DButtonerEvents); // TODO: инициализируйте данные экземпляра вашего элемента. } Элемент Buttoner, как и все управляющие элементы ActiveX, порождается от класса COleControl, поэтому можно воспользоваться методомSetText() этого класса и изменить надпись на элементе: CButtonerCtrl::CButtonerCtrl() { InitiallzeIIDs(&IID_DButtoner, &IID_DButtonerEvents); // TODO: инициализируйте данные экземпляра вашего элемента. SetText("Нажми меня!"); } Пора приступать к программированию. Начнем с добавления событий в элемент ActiveX. Другие программы, которые пользуются этим управляющим элементом, могут содержать обработчики, вызываемые при возникновении события. Добавление событий Мы создадим в элементе Buttonerсобытие Click, происходящее при щелчке мышью. Его возникновение (с извещением программы, в которую внедрен элемент ActiveX) называется возбуждением(firing) события, поэтому говорят, что при щелчке мышью программа возбуждает событие Click. При возбуждении события Click вызывается его обработчик в программе, содержащей наш элемент. Давайте посмотрим, как это делается. Откройте ClassWizard перейдите на вкладкуActiveX Eventsи нажмите кнопку Add Event.Открывается одноименное окно. В нем мы и создадим событие Click. Выберите строку Clickв раскрывающемся спискеExternal name — в наш элемент добавляется событие Click. Чтобы событие действительно произошло, нужно вызвать методFireClick(), который также указан в окне Add Event. ПОДСКАЗКА: Если вы хотите, чтобы новое событие вызывалось с параметрами (которые будут передаваться обработчику программы, работающей с элементом), введите параметры и их типы в списке Parameter, расположенном в нижней части окна Add Event. Событие Click будет возбуждаться при щелчке левой кнопкой мыши, поэтому сейчас мы включим в элемент ActiveX обработчик OnLButtonDown(): void CButtonerCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: добавьте код обработки сообщения // и/или вызовите обработчик по умолчанию COleControl::OnLButtonDown(nFlags, point); } Чтобы возбудить событие Click, достаточно вызвать специальный метод FireClick(), созданный ClassWizard (если событие передает обработчикам какие-либо параметры, их следует передать методуFireEvent(), где Event— имя вашего события): void CButtonerCtrl;:OnLButtonDown(UlNT nFlags, CPoint point) { FireClick(); COleControl::OnLButtonDown(nFlags, point); } Эта фрагмент приводит к тому, что при каждом щелчке мышью будет возбуждаться событие Click, а программы, работающие с элементом, смогут отреагировать на него в обработчике. Мы научились возбуждать события из элемента ActiveX. Число щелчков должно сохраняться в свойстве data, и сейчас мы создадим это свойство. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 318. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |