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

1 ... 146 147 148 [ 149 ] 150



Рис. 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 показано, как изменится внешний вид элемента управления после двух щелчков внутри многоугольника.



1 ... 146 147 148 [ 149 ] 150

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