готовности
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/
Похожие работы
Интересная статья: Основы написания курсовой работы