|
Программирование >> Процедурные приложения
Рис. 23.16. Изменение внешнего вида страницы свойств Теперь нужно добавить обработчик, управляющий изменением значения поля idc sides. Для этого выполните щелчок правой кнопкой мыши на поле и выберите в контекстном меню команду Events. В появившемся окне выберите в списке Classorobjecttohandle элемент IDC SIDBS, а затем в списке NewWindowsMessages/Events- сообщение EN CHANGE. Щелкните на кнопке AddHandler, после чего в открывшемся окне AddMemberFunctionбудет предложено имя обработчика (рис. 23.17). Рис. 23.17. Добавление обработчика сообщений Примите предлагаемое имя OnChangeSides и закройте оба окна. В результате в файл POLYPROP.H будет добавлена стандартная реализация данного обработчика, а в схеме сообщений класса CPolyProp появится новая запись: BEGIN MSG MAP(CPolyProp) CHAIN MSG MAP(IPropertyPageImpKCPolyProp>) COMMAND HANDLER(IDC SIDES, EN CHANGE, OnChangeSides) END MSG MAP () Следующим шагом будет внесение изменений в файл POLYPROP.H: PolyProp.h: Объявление класса CPolyProp #ifndef POLYPROP H #define POLYPROP H #include resource.h основные константы #include Polygon.h EXTERN C const CLSID CLSID PolyProp; / II CPolyProp class ATL NO VTABLE CPolyProp : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CPolyProp, &CLSID PolyProp>, public IPropertyPageImpl<CPolyProp>, public CDialogImpl<CPolyProp> { public: CPolyProp ( ) { m dwTitleID = IDSJTITLEPolyProp; m dwHelpFileID -IDS HELPFILEPolyProp; m dwDocStringID = IDS DOCSTRINGPolyProp; enura (IDD = IDD POLYPROP}; DECLARE REGISTRY RESOURCEID ( IDR POLYPROP) DECLARE PROTECT FINAL CONSTRUCT ( ) BEGIN COM MAP (CPolyProp) - COM INTERFACE ENTRY ( I Proper tyPage ) END COM MAP ( ) BEGIN MSG MAP (CPolyProp) CHAIN MSG MAP ( IPropertyPageImpKCPolyProp>) COMMAND HANDLER(IDC SIDES, EN CHANGE, OnChangeSides) END MSG MAP ( ) STDMETHOD (Apply) (void) 1 OSES CONVERSION ; ATLTRACE ( T ( CPolyProp: :Apply\n ) ) ; for (UINT i = 0; i < m nObjects; i++) CComQIPtr<IPolyCtl , SIID IPolyCtl> pPoly (m ppOnk[i]) ; short nSides = ( short) GetDlgl temlnt (IDC SIDES) ; if FAILED (pPoly->put Sides (nSides) ) { CComPtr<IErrorInf o> pError ; CComBSTR strError; GetErrorInfo(0, SpError) ; pError->GetDescription (fistrError) ; MessageBox(OLE2T(strError) , T ( Error ), MB ICONEXCLAMATION) ; return E FAIL; } } m bDirty = FALSE; return S OK; } LRESULT OnChangeSides(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { SetDirty(TRCE); return 0; #endif POLYPROP H Страница свойств может быть вызвана сразу несколькими клиентами. Для обслуживания всех клиентов в функции Apply() запускается цикл и в нем вызывается метод put Sides() для каждого клиента, данные которого были введены в текстовое поле. Страница свойств добавляется в проект с помощью единственной строки в файле POLYCTL.H: BEGIN PROP MAP(CPolyCtl) PROP DATA ENTRY( c.x , m sizeExtent.ex, VT UI4) PROP DATA ENTRY( cy , m sizeExtent.cy, VT UI4) PROPJ3NTRY( FillColor , DISPID FILLCOLOR, CLSID StockColorPage) PRQP ENTRY( Sides , 1, CLSID PolyProp) END PROP MAP 0 Теперь можно приступать к тестированию элемента управления на Web-странице. Тестирование элемента управления ATLна Web-странице Мастер ATL-объектов создает исходный элемент управления вместе с тестовым HTML-файлом, который находится в папке проекта. Он называется POLYCTL.HTM и может быть открыт в броузере Microsoft Internet Explorer. С помощью данного файла можно протестировать созданный нами элемент управления. Но прежде в этот файл следует внести изменения, выделенные ниже полужирным шрифтом: <HTML> <HEAD> <TITLE>ATL 3.0 test page for object PolyCtl</TITLE> </HEAD> <BODY> <OBJECT ID= PolyCtl CLASSID= CLSID:4CBBC676-5 07F-11DO-B98B-000000000000 > </OBJECT> <SCRIPT LM GOAGE= VBScript > <! - Sub PolyCtl ClickIn(x, y) PolyCtl.Sides = PolyCtl.Sides + 1 End Sub Sub PolyCtl ClickOut(x, у) PolyCtl.Sides = PolyCtl.Sides - 1 End Sub -> </SCRIPT> </BODY> </HTML> Теперь запустите Internet Explorer и откройте в нем файл POLYCTL.HTM. Начальное содержимое Web-страницы показано на рис. 23.18. Выполните несколько щелчков мышью внутри и вне многоугольника. Как вы убедитесь, число вершин станет автоматически увеличиваться >> уменьшаться, если только не будут достигнуты граничные значения 2 и 11 - в этом случае выдается сообщение об ошибке Must have between 3 and 10 sides. На рис. 23.19 показано, как изменится внешний вид элемента управления после двух щелчков внутри многоугольника.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |