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

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


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

Visual C++. COM. Библиотека ATL. Уроки по программированию с сайта http://alexeev.nm.ru

Рассылка №21

Visual C++. COM. Библиотека ATL. Урок 5. Добавляем свойство для элемента ActiveX.
Visual C++. COM. Библиотека ATL. Урок 6. Добавляем метод для элемента ActiveX.
Visual C++. COM. Библиотека ATL. Урок 7. Добавляем событие для элемента ActiveX.
Visual C++. COM. Библиотека ATL. Урок 8. Испытываем ActiveX в Visual Basic'е.

Полные версии уроков (с картинками) можно найти по адресам
Урок 5. Добавляем свойство для элемента ActiveX.
Урок 6. Добавляем метод для элемента ActiveX.
Урок 7. Добавляем событие для элемента ActiveX.
Урок 8. Испытываем ActiveX в Visual Basic'е.

Visual C++. Технология COM и библиотека ATL. Урок 5. Добавляем свойство для элемента ActiveX

Для добавления свойства щелкаем на вкладке ClassView на интерфейсе IFirstATL (Не перепутайте! У нас два интерфейса с таким именем, и нам нужен именно внешний интерфейс, а не интерфейс внутри класса CFirstATL!). В появившемся контекстном меню выбираем, естественно, Add Property.

В появившемся диалоговом окне Add Property to Interface задаем имя свойства как num и тип свойства как short. Обратите также внимание на то, что наше свойство будет и для записи, и для чтения (будут стоять две соответствующие галочки). Если нам надо что-нибудь одно (например у нас есть некоторое свойство только для чтения), то соответствующую галочку надо убрать. Для закрытия диалогового окна нажимаем на OK.

После этого внесите изменения в класс CFirstATL, а именно добавьте в него переменную m_num для нашего свойства num:

class ATL_NO_VTABLE CFirstATL :
    ...
private:
    short m_num;
};

Обнулите эту переменную в конструкторе класса:

public:
    CFirstATL()
    {
        m_num=0;
    }

Обратите внимание на изменения на вкладке ClassView. Во-первых, в нашем внешнем интерфейсе IFirstATL появилось два метода num (для чтения и записи). Во-вторых, в интерфейсе IFirstATL класса CFirstATL появилось два новых метода - get_num и put_num (для чтения и записи соответственно).

Для перехода в окно кода сделайте двойной щелчок на любом из них. Измените код следующим образом:

STDMETHODIMP CFirstATL::get_num(short *pVal)
{
    // TODO: Add your implementation code here
    *pVal=m_num; //Читаем свойство
    return S_OK;
}

STDMETHODIMP CFirstATL::put_num(short newVal)
{
    // TODO: Add your implementation code here
    m_num=newVal; //Записываем свойство
    return S_OK;
}

С созданием свойства все!

Наверх

Visual C++. Технология COM и библиотека ATL. Урок 6. Добавляем метод для элемента ActiveX

Для добавления метода вызовите контекстное меню для интерфейса IFirstATL, и выберите в нем Add Method.

Опять же не перепутайте - из двух интерфейсов IFirstATL надо брать тот, который не в классе CFirstATL!

Появится окно Add Method. В нем в поле Method Name впечатайте inc (именно так мы хотели назвать наш метод).

Для закрытия окна нажимаем на OK. Обратите внимание на изменения на вкладке ClassView. Во-первых, у интерфейса IFirstATL появился новый метод.

Во-вторых, новый метод появился и у интерфейса нашего класса. Делаем на нем двойной щелчок для перехода в окно кода, в котором впечатываем следующую строку:

STDMETHODIMP CFirstATL::inc()
{
 // TODO: Add your implementation code here
 m_num++;
 return S_OK;
}

С написанием нашего первого метода все!

Наверх

Visual C++. Технология COM и библиотека ATL. Урок 7. Добавляем событие для элемента ActiveX

В этом уроке мы с вами посмотрим, как можно добавить событие к нашему элементу ActiveX.

Для добавления событий используется отдельный интерфейс. У нас он назван _IFirstATLEvents (у вас он может иметь и другое имя - в зависимости от того, как вы назвали ваш ActiveX. Но в любом случае его имя должно оканчиваться на *Events). Щелкните на нем правой кнопкой мыши и в контекстном меню выберите Add Method.

В появившемся диалоговом окне Add Method to Interface установите Return Type как void и Method Name в Three.

Нажмите на OK для закрытия диалогового окна. Наше новое событие добавится в интерфейс _IFirstATLEvents.

Теперь нам надо это событие откуда-то возбуждать (fire по-английски). Последовательность действий здесь следующая - сначала мы должны откомпилировать наш ActiveX (это важно, так как нам понадобится один из файлов, получаемых в результате компиляции!). Для этого нажимаем на F7 или на соответствующую кнопку на панели инструментов.

Ошибок быть не должно. Если они все же есть, то исправьте их. После компиляции щелкаем на классе правой кнопкой мыши и выбираем в контекстном меню Implement Connection Point (это те самые точки соединения, которые мы сделали в уроке 3).

В появившемся окне Implement Connection Point ставим галочку у интерфейса _IFirstATLEvents. Нажимаем OK для закрытия диалогового окна. Обратите внимание, что на вкладке ClassView появился новый класс CProxy_IFirstATLEvents, а внутри его - метод Fire_Three.

Этот класс является представителем (Proxy) для нашего класса CFirstATL.

Теперь изменим метод inc класса CFirstATL так, чтобы событие Three возникало тогда, когда значение свойства num станет равным 3:

STDMETHODIMP CFirstATL::inc()
{
    // TODO: Add your implementation code here
    m_num++;
    if(m_num==3)
        Fire_Three();
    return S_OK;
}

Все! Теперь у нашего элемента ActiveX есть событие.

Наверх

Visual C++. Технология COM и библиотека ATL. Урок 8. Испытываем ActiveX в Visual Basic'е

В качестве испытательного полигона запустите VB, создайте новый проект типа Standard EXE. Далее добавляем на панель элементов наш ActiveX (в контекстном меню для панели элементов выбираем Components, далее ищем в списке Atl1 1.0 Type Library (если не находится, то воспользуйтесь кнопкой Browse)). После перекидываем появившийся на панели элементов наш ActiveX на форму. Добавляем на форму также одну кнопку Command1. В окне кода пишем следующие строчки:

Option Explicit
Private Sub Command1_Click()
  'Увеличиваем num
  FirstATL1.inc
End Sub
Private Sub FirstATL1_Three()
  MsgBox "Событие Three"
End Sub

Запускаем программу (F5), и три раза жмем на кнопку. При первых двух щелчках ничего не происходит, при третьем (когда num увеличится до трех), выскочит messagebox с надписью "Событие Three"

Таким образом мы создали элемент ActiveX с помощью ATL, и у него есть и свойства, и методы, и события. Есть, правда, и недостатки. В частности, свойства не сохраняются (попробуйте, например, изменить свойство num). Но об этом - в последующих уроках.

Наверх

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

Copyright cайт alexeev.nm.ru, 2001



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

В избранное