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

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


BOOL CTDCtrlPropPage::CTDCtrlPropPageFactory::UpdateRegistry (BOOL bRegister) { if (bRegister)

return AfxOleRegisterPropertyPageClass(AfxGetlnstanceHandle(),

m clsid, IDS TDCTRL PPG) else

return AfxOleUnregisterClass(m clsid, NULL); }

/

CTDCtrlPropPage::CTDCtrlPropPage - Конструктор CTDCtrlPropPage::CTDCtrlPropPage() :

COlePropertyPage(IDD, IDS TDCTRL PPG CAPTION) ! ({AFX DATA INIT(CTDCtrlPropPage)

ПРИМЕЧАНИЕ: мастер классов будет добавлять здесь операторы инициализации переменных-членов.

НЕ РЕДАКТИРУЙТЕ то, что здесь находится. }}AFXDATAINIT }

/

CTDCtrlPropPage::DoDataExchange- Осуществляет обмен данными

между страницей и связанными с ней свойствами

void CTDCtrlPropPage::DoDataExchange(CDataExchange* pDX) {

{(AFX DATA MAP(CTDCtrlPropPage)

ПРИМЕЧАНИЕ: мастер классов будет добавлять здесь вызовы DDP-, DDX- и DDV-функций.

НЕ РЕДАКТИРУЙТЕ то, что здесь находится. }}AFX DATA MAP DDP PostProcessing(pDX); }

/

Обработчики сообщений класса CTDCtrlPropPage

Функция AfxOleRegisterPropertyPageClass() предназначена для регистрации класса страницы свойств в системном реестре. Благодаря этому страница свойств может использоваться другими контейнерами, которые поддерживают внедрение элементов управления ActiveX. Регистрационная запись с указанием имени страницы свойств и ее местоположения в системе обновляется всякий раз при вызове данной функции.

Обратите внимание, что в конструкторе базового класса CDlePropertyPage, от которого порожден класс CTDCtrlPropPage, можно указать идентификатор шаблона диалогового окна, положенного в основу страницы свойств, а также идентификатор строки заголовка.

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

Модификация шаблона

Элемент управления ActiveX, автоматически созданный мастером ControlWizard, можно изменить с помощью мастера ClassWizard. Мы внесем следующие изменения в имеющийся шаблон:

элемент управления будет представлен на экране не эллипсом, а прямоугольником;

прямоугольный элемент управления будет закрашен желтым цветом;

элемент управления будет реагировать на события мыши, выводя внутри прямоугольника текущее системное время и дату.

Сделать все это можно путем внесения изменений в файлы TDCtrlCtl.CPPи TDCtrlCtl.H.

Изменение формы, размеров и цвета элемента управления TDCtrl



В окне компилятора VisualC++ в меню View выберите команду ClassWizard, чтобы запустить мастер ClassWizard, и выполните действия, перечисленные далее.

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

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

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


Рис. 22.9. Добавление свойства TDShape в окне AddProperty

4. В поле Externalname введите имя свойства TDShape.

5. В группе опций Implementation (тип реализации) выберите переключатель Membervariable(значение свойства будет храниться в переменной-члене).

6. В списке Туре (тип свойства) выберите тип данных BOOL. Обратите внимание, что в ходе выполнения предыдущих установок в поле Notificationfunction(функция обработки изменений) автоматически появилась запись OnTDShapeChanged, а для переменной-члена (поле Variablename) было подобрано имя m tDShape, также автоматически.

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

8. Еще раз щелкните на кнопке AddProperty, и перед вами повторно откроется диалоговое окно AddProperty.

9. В этот раз в списке Externalnameвыберите свойство BackColor.

10. В группе опций Implementationвыберите переключатель Stock(базовое свойство).

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




Рис. 22.10. Мастер ClassWizard добавляет в класс TDCtrlCtrl новые свойства - BackColor и

TDShape

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

Мастер классов добавит в файл TDCTRLCTL.Hобъявление функции OnTDShapeChanged ( ) и переменной m tDShape, а в файл TDCTRLCTL.CPPдобавит стандартную реализацию указанной функции и поместит в схему диспетчеризации соответствующие макросы.

Все перечисленные изменения автоматически вносились мастером классов. Теперь наступает наш черед производить изменения.

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

В следующем листинге показаны изменения, вносимые в файл TDCTRLCTL.CPP(выделены полужирным шрифтом).

/

CTDCtrlCtrl::OnDraw- Функция отображения

void CTDCtrlCtrl::OnDraw(CDC* pdc, const CRect SrcBounds,

const CRect srclnvalid) {

CBrush* pOldBrush;

CBrush NewBrush;

CPen* pOldPen;

CPen NewPen;

pdc->Fil!Rect(rcBounds, CBrush::FromHandle((HBRUSH)

GetStockObject(WHITE BRUSH))); NewPen.CreatePen(PS SOLID, 3, RGB(0, 0,0)); pOldPen = {CPen*)pdo->SelectObject(SNewPen), Создание желтой кисти

NewBrush.CreateSolidBrush(RGB(255, 255, 0)); pOldBrush = (CBrush*)pdc-

>SelectObject(SNewBrush);

Рисование прямоугольника с заливкой

pdc->Rectangle(rcBounds);



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

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