C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 6. Добавляем событие / ActiveX / Приложение

Visual C++. ActiveX
Урок 6. Добавляем событие

Для начала пара слов, что такое событие (event). ActiveX-элементы не могут существовать сами по себе. Они обязательно существуют в некотором контейнере (например, на форме). ActiveX-элемент может уведомлять форму, что с ним что-то произошло. Так вот, такие уведомления и называются события. Типичный пример события - это Click для кнопки. Когда на кнопке щелкают, то она говорит своему контейнеру "На мне щелкнули!". Если у контейнера есть обработчик для этого события, то контейнер что-то делает, как-то обращает внимание на этот щелчок. Если обработчика нет, то ничего и не происходит. Обратите внимание, что обработчик находится в контейнере, а не в ActiveX-элементе. И программист, использующий этот ActiveX, может написать в обработчике все, что захочет (или вообще ничего не писать).

Для добавления события вызываем ClassWizard (Ctrl+W) и переходим на вкладку ActiveX Events:

Вкладка ActiveX Events

Далее в правой части окна ClassWizard'а нажимаем на кнопку Add Event. Появляется окно Add Event. Заполните его поля следующим образом:

Окно Add Event

External name - это внешнее имя для нашего события (это имя будет видно снаружи, например, при использовании ActiveX'а в некотором проекте). Internal name - это внутреннее имя. Образуется оно так - Fire плюс имя события. У нас это FireMyEvent. Это имя используется для порождения (fire) этого события нашим элементом ActiveX. То есть в том месте кода, в котором мы хотим чтобы наш ActiveX-элемент известил свой контейнер об этом событии, мы должны написать

...
FireMyEvent();
...

Пишеться это, естественно, в коде элемента ActiveX.

Нажимаем OK для закрытия окна Add Event и еще раз OK для закрытия ClassWizard.

Обратите внимание на изменения на вкладке ClassView. К интерфесу прибавилось событие MyEvent:

Событие MyEvent

И в класса CFirstAXCtrl прибавился метод для полождения события FireMyEvent():

Метод FireMyEvent()

Теперь добавим код, вызывающий наше событие. Давайте сделаем так, чтобы наше событие вызывалось при щелчке мышкой на нашем ActiveX-элементе. Для этого стандартным способом (например, с помощью ClassWizard'а) добавьте обработчик для сообщения WM_LBUTONUP и измените его следующим образом:

void CFirstAXCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    FireMyEvent();//Вызываем наше событие
    COleControl::OnLButtonUp(nFlags, point);
}

Теперь при щелчке левой кнопкой мыши наш ActiveX пошлет своему контейнеру (например, форме) событие MyEvent. А уж контейнер как-то это событие обработает.

Откомпилируйте наш элемент ActiveX (F7). В последующих уроках мы проверим его работу в VB и VC++.