Читать статья по информатике, вычислительной технике, телекоммуникациям: "Создание собственных ActiveX элементов" Страница 3

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

готовности

Text - Текст

Для практики включим два базовых свойства в ActiveX MyClock: BackColor и ForeColor.

Выполните следующие действия:

View -> ClassWizard -> Automation( проверте, чтобы в окне Class name установлен класс CMyClockCtrl )

Нажмите на кнопку Add Property

Выберите из списка BackColor и нажмите OK

Также добавьте и свойство ForeColor.

Элемент управления MyClock имеет сейчас свойства BackColor и ForeColor, но пока не использует значения, хранящиеся в этих свойствах. Вам надо написать код в функции OnDraw(), который выполняет эту задачу:

void CMyClockCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {

// TODO: Replace the following code with your own drawing // code.

// Задать цвет переднего плана( цвет текста ) pdc->SetTextColor( TranslateColor(GetForeColor()));

// Установить режим прозрачного фона pdc->SetBkMode(TRANSPARENT);

// Создать кисть на основе значения BackColor CBrush bkBrush( TranslateColor(GetBackColor()));

// Закрасить фон pdc->FillRect(rcBounds,

&bkBrush); char CurrentTime[30] ; struct tm *newtime; long lTime;

// Получить текущее время time(&lTime) ; newtime=localtime(&lTime);

// Преобразовать время в строку. strcpy(CurrentTime, asctime(newtime));

// Дополнить строку одним символом пробела. CurrentTime[24]=' ';

// Дополнить строку ограничивающи символом. CurrentTime[25] = 0;

// Вывести текущее время pdc->ExtTextOut(rcBounds.left,rcBounds.top, ETO_CLIPPED, rcBounds, CurrentTime, strlen(CurrentTime), NULL) ; }

Ну вот и всё, теперь элемент управления MyClock имеет свойства BackColor и ForeColor.

7. Включение специального свойства в ActiveX MyClock

Во многих случаях вам понадобится включить в свой элемент управления такие свойства, которые не входят в список стандартных. Эти свойства называются специальными.

Для примера включем в MyClock специальное свойство UpdateInterval - период обновления:

View -> ClassWizard -> Automation( проверте, чтобы в окне Class name установлен класс CMyClockCtrl )

Нажмите на кнопку Add Property

В окне External name наберите UpdateInterval

В окне Type выберите Long

В окне Variable name должно быть m_updateinterval

В окне Notification function поставьте OnUpdateIntervalChanged

Проверте, что в камке Implementation выбрана кнопка Member variable и нажмите OK

Тем самым мы определили, что со свойством UpdateInterval будет связана переменная m_updateinterval и всякий раз, когда значение свойства UpdateInterval будет именяться, автоматически выполнится функция OnUpdateIntervalChanged.

Теперь надо проинициализировать свойство UpdateInterval:

Откройте файл MyClockCtl.cpp

Найдите функцию DoPropExchange() и напишиет в ней следующее:

// Инициализация свойства UpdateInterval значением 1000

PX_Long( pPX, _T("UpdateInterval"), m_updateinterval, 1000 );

Теперь надо модернизировать функции OnUpdateIntervalChanged:

// проверка на отризательность

if( m_updateinterval < 0 )

{

MessageBox( "This property cannot be negative !!!" );

m_updateinterval = 1000;

}

// Установка таймера

SetTimer( 1, (UINT)m_updateinterval, NULL );

и OnCreate:

// Установка таймера

SetTimer( 1, (UINT)m_updateinterval, NULL );

Ну вот и всё ActiveX MyClock полностью готов !!!

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.realcoding.net/


Интересная статья: Основы написания курсовой работы