ActiveX с нуля


Добавление новых свойств, методов и событий в элемент ActiveX MyCtrl.


Давайте усложним наш элемент ActiveX. Добавим таймер в элемент, который будет включен при загрузке элемента, сможет отключаться при управлении со стороны контейнера, интервал между включениями таймера будет изменяться при настройке элемента через страницу свойств. При срабатывании таймера пусть в элементе отображается счетчик. При этом в контейнер будут передаваться события – нотификационные сообщения.

Добавление пользовательского свойства Sleep – задержки между срабатываниями таймера не должно вызвать у Вас затруднений. Пусть задание значения этого свойства выполняется через методы Set/Get, тип свойства – long. В классе CmyCtrlCtrl добавьте переменную типа long m_timeSleep, измените методы Get/Set, как показано ниже:

long CMyCtrlCtrl::GetSleep()

{

     return m_timeSleep;

}

void CMyCtrlCtrl::SetSleep(long nNewValue)

{

     m_timeSleep = nNewValue;

     SetModifiedFlag();

}

Добавьте в функцию  CMyCtrlCtrl::DoPropExchange следующую строку, обеспечивающую сохранение свойства Sleep:

     PX_Long(pPX, _T("Sleep"),  m_timeSleep, 1000);

Добавьте в страницу свойств элемента элемент типа редактирования для задания численного значения m_timeSleep и свяжите его со свойством Sleep.

Для добавления таймера включите в класс CMyCtrlCtrl переменные

           

UINT idTimer;            // для идентификатора таймера

            BOOL timerOn;          // для определения состояния таймера – включен.отключен.

Установку таймера нужно добавить не в конструкторе, а в методе по обработке сообщения WM_CREATE. Для обработки этого сообщения используйте ClassWizard:

#define ID_TIMER   1001 //идентификатор таймера

 

int CMyCtrlCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

     if (COleControl::OnCreate(lpCreateStruct) == -1)

          return -1;

    

     idTimer = SetTimer( ID_TIMER, m_timeSleep, NULL );

     timerOn = FALSE;  

     return 0;

}

Удаление таймера можно выполнить при обработке сообщения WM_CLOSE. Добавьте обработчик этого сообщения с помощью ClassWizard:




- Начало -  - Назад -  - Вперед -