Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. ActiveX. Уроки по программированию с сайта http://alexeev.nm.ru

Рассылка №13

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

Visual C++. ActiveX. Урок 4. Добавляем свойство

В этом уроке мы с вами посмотрим, как можно добавлять к элементу ActiveX некоторое свойство (property). Поясним во-первых, что такое свойство. Когда другой программист будет использовать ваш ActiveX, то он имеет дело с некоторыми характеристиками этого ActiveX'а (например, Caption, Width и т. д.). Так вот, эти видимые извне характеристики элемента ActiveX и есть его свойства. Особено наглядно свойства видны в Visual Basic'е, Delphi или в C++ Builder. Во всех этих программах есть окно свойств. В Visual C++ это тоже видно, хотя не столь наглядно.

Для добавления свойства вызовите ClassWizard (Ctrl+W), и перейдите в нем на вкладку Automation.

В правой части окна ClassWizard'а расположена кнопка Add Property. Нажимаем на нее. Открывается окно Add Property. Заполните ее следующим так: Поле External Name - это то имя, под которым свойство нашего ActiveX-элемента будет видно снаружи. У нас это "Number". Type - это, разумеется, тип свойства. Мы выбрали тип short. И, наконец, Variable name. Это имя внутренней переменной класса нашего ActiveX'а. Мы назвали эту переменную m_number. Именно в ней и будет хранится значение для нашего свойства. Обратите также внимание, что мы выбрали тип именно Member variable.

Выбор типа Member variable означает, что до этого свойства в программе-контейнере программист сможет добраться так:

...
k.number; //k - это экземпляр нашего ActiveX
 ...

Нажимаем OK для закрытия окна Add Property и еще раз OK для закрытия окна ClassWizard. Обратите внимание на следующие изменения на вкладке ClassView. Во-первых, в интерфейсе нашего ActiveX появилось новое свойство Number. Во-вторых, в классе CFirstAXCtrl появилась переменная m_number.

Именно так и добавляются свойства к элементу ActiveX.

Наверх

Visual C++. ActiveX. Урок 5. Добавляем метод

В этом уроке мы с вами посмотрим, как к элементу ActiveX можно добавить метод. Наш метод будет очень простой - при его вызове будет раздаваться звуковой сигнал.

Вызываем ClassWizard (Ctrl+W), переходим в нем на вкладку Automation. В правой части ClassWizard'а нажимаем на кнопку Add Method. Появится диалоговое окно Add Method. Заполните его поля как указано ниже. Поле External name - это внешнее имя нашего метода. Поле Internal name - его внутреннее имя. (У нас значения для этих двух полей равны beep). Return type - это, разумеется, тип возвращаемого процедурой значения. Мы ставим его как void - наш метод ничего не возвращает.

Давайте слегка усложним наш метод (а то больно он получается простым), а именно добавим к нему параметр. Для этого в нижней части диалога Add Method в Parameter list добавляем параметр nBeeps типа short. Этот параметр будет отвечать за продолжительность звукового сигнала.

Нажимаем OK для закрытия окна Add Method и еще раз OK для закрытия ClassWizard'а. Обратите внимание на изменения на вкладке ClassView. В интерфейсе появился метод beep.

И в классе CFirstClassCtrl появился метод класса beep.

Щелкаем на нем для перехода в окно кода. Вносим вледующие изменения в сгенерированную заготовку для кода:

void CFirstAXCtrl::beep(short nBeeps)
{
    // TODO: Add your dispatch handler code here
    for(int i=0;i<nBeeps;i++){
        MessageBeep(-1);
        Sleep(1000); //Делаем задержку на 1 секунду
    }
}

Таким образом мы добавили в наш ActiveX-элемент метод.

Наверх

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

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

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

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

...
FireMyEvent();
 ...

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

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

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

И в класса CFirstAXCtrl прибавился метод для полождения события 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++.

Наверх

© Алексеев Игорь, 2001

© Сайт alexeev.nm.ru, 2001


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное