|
Программирование >> Процедурные приложения
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);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |