void CMyClockCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { // TODO: Replace the following code with your own drawing // code. // Залить элемент управления выбранным цветом. pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject (WHITE_BRUSH))) ; 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) ; }
int CMyClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here // Установить таймер. SetTimer(1, 1000, NULL); return 0; }
void CMyClockCtrl::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call // default // Переключить вызов на функцию OnDraw(). InvalidateControl() ; COleControl::OnTimer(nIDEvent) ; }
Ну вот и всё, теперь элемент управления MyClock имеет свойства BackColor и ForeColor.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) ; }