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

1 ... 134 135 136 [ 137 ] 138 139 140 ... 150


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



1 ... 134 135 136 [ 137 ] 138 139 140 ... 150

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