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 руб./мес


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




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

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 будет, во-первых, сохранятся, и во-вторых, у него будет некоторое начальное значение (задаваемое макросом или в конструкторе класса).