}
};
//========= Основной класс, экспонирующий интерфейс IOpenGL
class ATL_NO_VTABLE COpenGL :
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<COpenGL, IOpenGL>,
public IPersistStreamInitImpl<COpenGL>,
public IOleControlImpl<COpenGL>,
public IOleObjectImpl<COpenGL>,
public IOleInPlaceActiveObjectImpl<COpenGL>,
public IViewObjectExImpl<COpenGL>,
public IOleInPlaceObjectWindowlessImpl<COpenGL>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<COpenGL>,
public CProxy_IOpenGLEvents<COpenGL>,
public IPersistStorageImpl<COpenGL>,
public ISpecifyPropertyPagesImpl<COpenGL>,
public IQuickActivateImpl<COpenGL>,
public IDataObjectImpl<COpenGL>,
public IProvideClassInfo2Impl<&CLSID_OpenGL, &__uuidof(_IOpenGLEvents),
&LIBID_ATLGLLib>,
public CComCoClass<COpenGL, &CLSID_OpenGL>,
public CComControl<COpenGL>
{
public:
COpenGL();
DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |
OLEMISC_CANTLINKINSIDE |
OLEMISC_INSIDEOUT |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST)
DECLARE_REGISTRY_RESOURCEID(IDR_OPENGL)
BEGIN_COM_MAP(COpenGL)
COM_INTERFACE_ENTRY(IOpenGL)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(IQuickActivate)
COM_INTERFACE_ENTRY(IPersistStorage)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
END_COM_MAP()
BEGIN_PROP_MAP(COpenGL)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
PROP_ENTRY("Parameters", 1, CLSID_GraphProp)
END_PROP_MAP()
BEGIN_CONNECTION_POINT_MAP(COpenGL)
CONNECTION_POINT_ENTRY(__uuidof(_IOpenGLEvents))
END_CONNECTION_POINT_MAP()
BEGIN_MSG_MAP(COpenGL)
CHAIN_MSG_MAP(CComControl<COpenGL>)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
static const IID* arr[] =
{
&IID_IOpenGL,
};
for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i], riid))
return S_OK;
}
return S_FALSE;
}
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
// IOpenGL
public:
//========= Экспонируемые методы
STDMETHOD(GetLightParams)(LONG* pPos);
STDMETHOD(SetLightParam)(SHORT lp, LONG nPos);
STDMETHOD(GetFillMode)(ULONG* pMode);
STDMETHOD(SetFillMode)(ULONG nMode);
STDMETHOD(GetQuad)(BYTE* bQuad);
STDMETHOD(SetQuad)(BYTE bQuad);
STDMETHOD(ReadData)(void);
//======= Переменные, необходимые для реализации интерфейса
OLE_COLOR m_clrFillColor;
long m_BkClr; // Цвет фона окна
int m_LightParam[11];// Параметры освещения
int m_xPos, m_yPos; // Текущая позиция мыши
HGLRC m_hRC; // Контекст OpenGL
HDC m_hdc; // Контекст Windows
float m_AngleX; // Угол поворота вокруг оси X
float m_AngleY; // Угол поворота вокруг оси Y
float m_AngleView; // Угол перспективы
float m_fRangeX; // Размер объекта вдоль X
float m_fRangeY; // Размер объекта вдоль Y
float m_fRangeZ; // Размер объекта вдоль Z
float m_dx; // Квант смещения вдоль X
float m_dy; // Квант смещения вдоль Y
float m_xTrans; // Cмещение вдоль X
float m_yTrans; // Cмещение вдоль Y
float m_zTrans; // Cмещение вдоль Z
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.