|
Программирование >> Процедурные приложения
запрашивая его данные и т.д. Разработчик должен определить интерфейс этого взаимодействия таким образом, чтобы элемент управления был полностью независимым от использующего его приложения. О таких объектах говорят, что они обеспечивают повторное вхождение. Вспомните, что элемент управления ActiveX представляет собой отдельную библиотеку динамической компоновки, не связанную ни с каким приложением. Повторное вхождение достигается за счет создания экземпляров библиотеки в каждом приложении, содержащем внедренный элемент управления. Взаимодействие между приложением и элементом осуществляется только посредством сообщений. Критерии разработки элементов управления Чтобы создаваемый элемент управления ActiveXполучился как можно более привлекательным и функциональным, необходимо определиться по ряду моментов. Во-первых, следует решить, как он должен выглядеть на экране. Требуется определенный талант, для того чтобы совместить в одном элементе управления высокую производительность и привлекательный внешний вид. Во-вторых, нужно учесть возможность изменения свойств элемента управления посредством интерфейса автоматизации. У элемента управления должны быть страницы свойств, позволяющие пользователям в процессе выполнения программы менять его свойства. Наконец, должна быть организована поддержка постоянства свойств элемента управления. Класс COleControl Элементы управления ActiveX порождаются от MFC -класса COleControl. В приведенном ниже листинге содержится часть файла AFXCTL.H с сокращенным описанием данного класса. Мы не станем подробно объяснять назначение каждой части файла, а лишь наглядно проиллюстрируем наиболее важные моменты. Это класс библиотеки MFC . Copyright (C)1992-1998Microsoft Corporation All rights reserved. Данный исходный код служит дополнением к справочному руководству и сопутствующей электронной документации по MFC . Обращайтесь к ним для получения более полной информации. / AFXCTL.H поддержка элементов управления OLE / Базовые события #define EVENT STOCK CLICK() \ {afxEventStock, DISPID CLICK, T( Click ),VTS NONE }, #define EVENT STOCK DBLCLICK() \ { afxEventStock, DISPID DBLCLICK, T( DblClick ), VTS NONE }, #define EVENT STOCK KEYDOWN() \ { afxEventStock, DISPID KEYDOWN, T( KeyDown ), VTS PI2 VTS I2 }, #define EVENT STOCK KEYPRESS() \ { afxEventStock, DISPID KEYPRESS, T( KeyPress ), VTS PI2 }, #define EVENT STOCK KEYUP() \ { afxEventStock, DISPID KEYUP, JTCKeyUp ) , VTS PI2 VTS I2 }, #define EVENT STOCK MOUSEDOWN() \ ( afxEventStock, DISPID MOUSEDOWN, T( MouseDown ), \ VTS I2 VTS I2 VTS XPOS PIXELS VTS YPOS PIXELS }, #define EVENT STOCK MOUSEMOVE() \ { afxEventStock, DISPID MOUSEMOVE, T( MouseMove ), \ VTS i2 VTS i2 vts xpos pixels vts ypos pixels }, #define EVENT STOCK MOOSEUP() \ { afxEventStock, DISPID MOUSEUP, T( MouseUp ), \ VTS I2 VTS I2 VTS XPOS PIXELS VTS YPOS PIXELS }, #define EVENT STOCK ERROREVENTO \{ afxEventStock, DISPID ERROREVENT, T( Error ),\ VTS I2 VTS PBSTR VTS SCODE VTS BSTR VTS BSTR VTS I4 VTS PBOOL }, #define EVENT STOCK READYSTATECHANGE () \ { afxEvtentStock, DISPID READYSTATECHANGE, T( ReadyStateChange ), \ VTS 14 }, / Базовые свойства #define DISP PROPERTY STOCK(theClass, szExternalName, dispid, pfnGet, pfnSet, vtPropType) \ { T(szExternalName), dispid, NULL, vtPropType, \ (AFX PMSG)(void (theClass::*)(void)JSpfnGet, \ (AFX PMSG)(void (theClass::*)(void))SpfnSet, 0, afxDispStock ), \ #define D1SP STOCKPROP APPEARANCE() \ DISP PROPERTY STOCK(C01eControl, Appearance , DISPID APPEARANCE, \ COleControl::GetAppearance, COleControl::SetAppearance, VT I2) #define DISP STOCKPROP BACKCOLOR() \ DISP PROPERTY STOCK(COleControl, BackColor , DISPID BACKCOLOR, \ COleControl::GetBackColor, COleControl::SetBackColor, VT COLOR) #define DISP STOCKPROP BORDERSTYLE() \ DISP PROPERTY STOCK(COleControl, BorderStyle , DISPID BORDERSTYLE, \ COleControl::GetBorderStyle, COleControl::SetBorderStyle, VT I2) #define DISP STOCKPROP CAPTION() \ DISP PROPERTY STOCK(COleControl, Caption , DISPID CAPTION, \ COleControl::GetText, COleControl::SetText, VT BSTR) #define DISP STOCKPROP ENABLED() \ DISP PROPERTY STOCK(COleControl, Enabled , DISPID ENABLED, \ COleControl::GetEnabled, COleControl::SetEnabled, VT BOOL) #define DISP STOCKPROP FONT() \ DISP PROPERTY STOCK (COleControl, Font , DISPID FONT, \ COleControl::GetFont, COleControl::SetFont, VT FONT) Idefine DISP STOCKPROP FORECOLOR() \ DISP PROPERTY STOCK(COleControl, ForeColor , DISPID FORECOLOR, \ COleControl::GetForeColor, COleControl::SetForeColor, VT COLOR) Idefine DISP STOCKPROP HWND() \ DISP PROPERTY STOCK(COleControl, hWnd , DISPID HWND, \ COleControl::GetHwnd, SetNotSupported, VT HANDLE) Idefine DISP STOCKPROP TEXT() \ DISP PROPERTY STOCK(COleControl, Text , DISPID TEXT, \ COleControl::GetText, COleControl::SetText, VT BSTR) Idefine DISP STOCKPROP READYSTATE() Л DISP PROPERTY STOCK(COleControl, ReadyState , DISPID READYSTATE, \ COleControl::GetReadyState, SetNotSupported, VT I4) / Базовые методы Idefine DISP FUNCT1ON STOCK(theClass, szExternalName, dispid, pfnMember, vtRetVal, vtsParams) \ ( T(szExternalName), dispid, vtsParams, vtRetVal, \ (AFX PMSG)(void (theClass::*)(void))SpfnMember, (AFX PMSG)0, 0, \ afxDispStock }, \ #define DISP STOCKFDNC REFRESH() \ DISP FUNCTION STOCK(COleControl, Refresh , DISPID REFRESH, \ COleControl::Refresh, VT EMPTY, VTS NONE) #define DISP STOCKFUNC DOCLICK() \ DISP FUNCTION STOCK(COleControl, DoClick , DISPID DOCLICK, \ COleControl::DoClick, VT.EMPTY, VTS NONE) / COleControl - базовыйклассэлементауправления. реализованного на C++ с использованием MFC classCOleControl: publicCWnd Базовые методы void Refresh () ; void DoClick () ; Базовые свойства short GetAppearance(); void SetAppearance(short); OLE COLOR GetBackColorO ; void SetBackColor(OLE COLOR); short GetBorderStyle(); void SetBorderStyle(short); BOOL GetEnabledO ; void SetEnabled(BOOL); CFontHolderS InternalGetFont(); LPFONTDISP GetFontO; void SetFont(LPFONTDISP); OLE COLOR GetForeColor(); void SetForeColor(OLE COLOR); OLE HANDLE GetHwnd(); const CStringS InternalGetText () ; BSTR GetText () ; void SetText(LPCTSTR); long GetReadyState(); void InternalSetReadyState(long INewReadyState) , Внешние свойства short AmbientAppearance(); OLE COLOR AmbientBackColor(); CString AmbientDisplayNarae(); LPFONTDISP AmbientFont(); OLE COLOR AmbientForeColor(); LCID AmbientLocalelDO; CString AmbientScaleUnits(>; short AmbientTextAlign(); BOOL AmbientUserModeO; BOOL AmbientUIDeadO; BOOL AmbientshowGrabHandles(); BOOL AmbientShowHatching(); Генерация событий void AFX CDECL FireEvent(DISPID dispid, BYTE* pbParams, Функции генерации базовых событий void FireKeyDown(USHORT* pnChar, short nShiftState); void FireKeyUp(USHORT* pnChar, short nShiftState); void FireKeyPress(USHORT* pnChar); void FireMouseDown(short nButton, short nShiftState, OLE XPOS PIXELS x, OLE YPOS PIXELS y) ; void FireMouseDp(short nButton, short nShiftState, OLE XPOS PIXELS X, OLE YPOS PIXELS y); void FireMouseMove(short nButton, short nShiftState, OLE XPOS PIXELS x, OLE YPOS PIXELS y); void FireClickO; void FireDblClickO ; void FireError(SCODE scode, LPCTSTR IpszDescription,
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |