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

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


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

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

Рассылка №15

Visual C++. ActiveX. Урок 9. Сохраняем значения свойств или метод DoPropExchange
Visual C++. ActiveX. Урок 10. Макросы PX_*

Visual C++. ActiveX. Урок 9. Сохраняем значения свойств или метод DoPropExchange

Когда мы испытывали наш ActiveX-элемент, то он не запоминал значения для своих свойств (собственно говоря, свойство у нас было только одно - number). Т. е., скажем, мы в тестовом проекте на VB устанавливали значение для number в 5, запускали тестовую программу, закрывали тестовую программу, и после этого смотрели на значение number. Оно не сохранялось, и вместо ожидаемой цифры 5 мы видели разную ерунду. Сейчас мы с вами посмотрим, как с этим можно бороться.

Для этих целей в классе C*Ctrl (у нас это CFirstAXCtrl) есть специальный метод DoPropExchange. Перейтите к его коду и внесите следующие изменения:

void CFirstAXCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);
    // TODO: Call PX_ functions for each persistent custom property.
    PX_Short(pPX, "Number", m_number);
}

В добавленной строке мы вызываем макрос PX_Short. Этот макрос отвечает за сохранение свойства Number (это второй параметр в нашем макросе). У нас это свойство типа short, поэтому мы и вызываем макрос PX_Short. В качестве значения берется m_number (третий параметр макроса). Макрос испольует объект pPX типа CPropExchange*, который отвечает за контекст и направление (т. е. сохраняем значение или его читаем) нашего сохранения.

У макроса PX_Short есть и второй вариант. Вот как можно было его написать в нашей программе:

    PX_Short( pPX, "Number", m_number, 3);

Отличие от первого варианта - в последнем параметре. Это значение по умолчанию для нашего свойства. Мы задали его 3. Другой вариант для задания начального значения для свойства - это задать его в конструкторе:

CFirstAXCtrl::CFirstAXCtrl()
{
    InitializeIIDs(&IID_DFirstAX, &IID_DFirstAXEvents);
    // TODO: Initialize your control's instance data here.
    m_number=0;
}

Обратите также внимание в методе DoPropExchange на строчку

    ...
    COleControl::DoPropExchange(pPX);
    ...

Она служит для сохранения разных встроенных (stock) свойств для нашего ActiveX. Таким образом сохраняются как определенные нами свойства, так и встроенные.

Если вы теперь испытаете наш ActineX-элемент (скажем в Visual Basic), то свойство Number будет, во-первых, сохранятся, и во-вторых, у него будет некоторое начальное значение (задаваемое макросом или в конструкторе класса).

Наверх

Visual C++. ActiveX. Урок 10. Макросы PX_*

На прошлом уроке мы с вами при сохранении свойства Number использовали макрос PX_Short. Вообще-то для сохранения свойств существует целый ряд таких макросов - для каждого типа переменной свой. Например, макросы PX_Bool, PX_Float, PX_Double и PX_String служат для сохранения свойств логического, действительного, действительного с двойной точностью и строкового типов соответственно.

С помощью таких макросов можно сохранять и свойства более сложных типов. Например, макросы PX_Font и PX_Color служат для сохранения шрифта и картинки для вашего элемента ActiveX.

Наверх

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

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


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

В избранное