Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS