Иллюстрированный самоучитель по Visual Studio .NET

Ручная коррекция класса

Класс COpenGL будет обслуживать окно внедренного СОМ-объекта. Он должен иметь достаточное количество данных и методов для управления изображаемой поверхностью, поэтому далее вручную введем сразу много изменений в файл с описанием класса COpenGL. При изменении файла заголовков класса мы нарушим стиль, заданный стартовой заготовкой, и вернемся к более привычному, принятому в MFC-приложениях. Перенесем существующее тело конструктора, а также функции OnDraw в файл реализации класса OpenGLcpp. В файле OpenGL.h останутся только декларации этих функций.

Ниже приведено полное описание класса COpenGL с учетом нововведений, упрощений и исправлений. Вставьте его вместо того текста, который есть в файле OpenGL.h. После этого вставим в файл новые сущности с помощью инструментов Studio .NET:

// OpenGL.h: Declaration of the COpenGL
#pragma once
#include " resource.h" // main symbols
#include <atlctl.h>
#include "_IOpenGLEvents_CP.h"
//========== Вспомогательный класс
class CPointSD
public:
fldat x;
float y;
float z; // Координаты точки в 3D
//====== Набор конструкторов и операция присвоения
CPoint3D () { х = у = z = 0; }
CPoint3D (float c1, float c2, float c3)
x = с1;
z = c2;
у = сЗ;
CPoint3D& operator=(constCPoint3D& pt)
x = pt.x;
z = pt .z;
У = pt.y;
return *this;
}
CPointSD (const CPoint3D& pt) *this = pt;
//==== Основной класс, экспонирующий интерфейс IQpenGL
class ATL_NO_VTABLE COpenGL:
p.ublic CQomObjectRootEx<CComSingleThreadModel>,
public CStockPropImpKCOpenGL, IOpenGL>,
public IPersistStreamInitImpl<COpenGL>,
public I01eControlImpl<COpenGL>,
public I01eObjectImpl<COpenGL>,
public I01eInPlaceActiveObjectImpl<COpenGL>,
public IViewObjectExImpl<COpenGL>,
public I01eInPlaceObjectWindowlessImpl<COpenGL>,
public ISupportErrorlnfo,
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:
//===== Переменные, необходимые для реализации интерфейса
OLE COLOR m clrFillColor; // Цвет фона окна
int m LightParamfll]; // Параметры освещения
 int m xPos, m yPos; // Текущая позиция мыши
 HGLRC m hRC; // Контекст OpenGL
 HDC m hdc; // Контекст Windows
 GLfloat m AngleX; // Угол поворота вокруг оси X
 GLfloat m AngleY; // Угол поворота вокруг оси Y
 GLfloat m AngleView; // Угол перспективы
 GLfloat m fRangeX; // Размер объекта вдоль X
GLfloat m fRangeY; // Размер объекта вдоль Y
 GLfloat m fRangeZ; // Размер объекта вдоль Z
 GLfloat m dx; // Квант смещения вдоль X
GLfloat m dy; // Квант смещения вдоль Y
 GLfloat m xTrans; // Смещение вдоль X
 GLfloat m yTrans; // Смещение вдоль Y
 GLfloat m zTrans; // Смещение вдоль Z
 GLenum m FillMode; // Режим заполнения полигонов
 bool m_bCaptured; // Признак захвата мыши
 bool m bRightButton; // Флаг правой кнопки мыши
 bool m bQuad; // Флаг использования GL QUAD
 UINT m xSize; // Текущий размер окна вдоль X
 UINT m zSize; // Текущий размер окна вдоль Y
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.