Программирование >>  Процедурные приложения 

1 ... 140 141 142 [ 143 ] 144 145 146 ... 150


pdc->SelectObject(pOldPen); pdc->SelectObject(pOldBrush);

Действие функции Rectangle() приводит к тому, что элемент управления принимает вид прямоугольника, закрашенного в желтый цвет.

Реакция на события мыши

В данном параграфе будет показано, как заставить элемент управления TDCtrlреагировать на действия, осуществляемые с помощью мыши. Мы сделаем так, что элемент управления после щелчка на нем указателем мыши изменит свой цвет на светло-серый и в нем отобразятся системное время и дата.

Ниже перечислены действия, которые необходимо выполнить для осуществления намеченного плана.

1. В диалоговом окне MFC lassWizard перейдите на вкладку Automation.

2. В списке Classname выберите класс CTDCtrlctrl.

3. С помощью кнопки AddProperty откройте диалоговое окно AddProperty.

4. В поле External names введитеHitTDCtrl.

5. В группе опций Implementation выберите переключатель Member variable.

6. В списке Туре выделите тип данных olecolor и очистите поле Notification function.

7. Щелкните на кнопке ОК, чтобы принять сделанные установки и вернуться к диалоговому окну MFC ClassWizard(рис. 22.11).

8. Перейдите на вкладку MessageMaps.

9. В списке Classname выберите класс CTDCtrlctrl.

10. В списке Messages выберите сообщение wm lbuttondown.

11. Щелкните на кнопке AddFunction.

12. Повторите действия, указанные в пунктах 10 и 11, по отношению к сообщению wm lbuttonup. Теперь ваше диалоговое окно должно выглядеть так, как показано на рис. 22.12.


Рис. 22.11. Свойство HitTDCtrl позволит элементу управления реагировать на события мыши




Рис. 22.12. Добавление обработчиков событий мыши

13. Щелкните на кнопке ОК, и мастер ClassWizard внесет изменения в код элемента управления.

Мастер классов автоматически добавит в файл TDCTRLCTL.Hобъявление переменной m hitTDCtrl, а в файл TDCTRLCTL.CPP- стандартные реализации обработчиков OnLButtonDown() и OnLButtonUp().

Теперь нужно самостоятельно добавить код, определяющий реакцию элемента управления на соответствующие события.

Файл TDCTRLCTL.H

В данный файл заголовков, сразу после объявления деструктора, следует поместить прототип новой функции HitTDCtrl(), предназначенной для изменения цвета элемента управления в ответ на щелчок мышью.

Реализация protected: -CTDCtrlCtrl() ;

void HitTDCtrl(CDC* pdc); изменение цвета Далее нужно написать код этой функции.

Возвращаемся к файлу TDCTRLCTL.CPP

При щелчке левой кнопкой мыши на элементе управления должен измениться цвет его прямоугольной области. Частично это событие обрабатывается функцией DoPropExchange(). Ниже показана исправленная версия данной функции в ЛОбав-ленной строкой, которая выделена полужирным шрифтом:

/

CTDCtrlCtrl::DoPropExchange- Поддержка постоянства элемента void CTDCtrlCtrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG( wVerMinor, wVerMajor)); COleControl::DoPropExchange(pPX);



TODO: Поместите здесь вызовы РХ -функций для каждого

постоянного пользовательского свойства. ;

Цвет элемента управления меняется на светло-серый

PX Color(pPX, T( HitTDCtrl ), m hitTDCtrl, RGB(200, 200, 200)); }

Эта функция отвечает за инициализацию переменной m hitTDCtrl, которой присваивается значение, соответствующее светло-серому цвету. Функция рх со1ог () осуществляет обмен данными между переменной m hitTDCtrl и свойством HitTDCtrl.

Мастер классов создал стандартные реализации функций OnLButtonDown() и OnLButtonUp() .Ниже показано, какие изменения вносятся в эти функции.

Функция OnLButtonDown() получает контекст устройства для рисования и вызывает функцию HitTDCtrl(), осуществляющую вывод текущих значений времени и даты. После отпускания левой кнопки мыши функция OnLButtonUp() вызывает функцию InvalidateControl(), что является сигналом системе послать элементу управления сообщение wm paint.

void CTDCtrlCtrl::OnLButtonDown(DINT nFlags, CPoint point) { TODO: Здесь добавьте собственный код обработчика CDC* pdc;

Отображение даты к времени pdc = GetDC() ;

HitTDCtrl(pdc); ReleaseDC(pdc);

COleControl::OnLButtonDown(nFlags, point); }

void CTDCtrlCtrl::OnLButtonUp(OINT nFlags, CPoint point)

TODO: Здесь добавьте собственный код обработчика InvalidateControl();

COleControl::OnLButtonUp(nFlags, point); }

Ниже показан код функции HitTDCtrl(), который следует добавить в конец

файла TDCTRLCTL.CPP:

void CTDCtrlCtrl::HitTDCtrl(CDC* pdc)

CBrush* pOldBrush;

CBrush hitBrush (TranslateColor(m hitTDCtrl)); CRect re; TEXTMETRIC tm; struct tm *date time; time t timer;

Устанавливается прозрачный фон pdc->SetBkMode(TRANSPARENT); GetClientRect(re);

pQldBrush = pdc->SelectObject(ShitBrush);

Рисование прямоугольника с заливкой pdc->Rectangle(re);

Получение даты и времени time(Stimer);

date tirae = localtime(stimer);

const CStringS strtime = asctime(date time);

Получение информации о шрифте и вывод надписи

pdc->GetTextMetrics (J.tm); pdc->SetTextAlign(TA CENTER TA TOP); pdc->ExtTextOut((re.left + re.right) /2, (re.top + re.bottom - tm.tmHeight) /2, ETO CLIPPED, re, strtime, strtime.GetLengthO - I, NULL); pdc->SelectObject(pOldBrush);

Цвет кисти определяется на основании переменной m hitTDCtrl, которая была модифицирована в функции DoPropExchange(). Заливке подвергается вся область элемента



1 ... 140 141 142 [ 143 ] 144 145 146 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика