Учебник по Visual C++ .Net


Введение обработчиков сообщений - часть 2


m_hdc = GetDCO ;

int iD = ChoosePixelFormat(m_hdc, &pfd) ;

if ( !ID )

{

ATLASSERT(FALSE);

return -1;

}

//====== Пытаемся установить этот формат

if ( ISetPixelFormat (m_hdc, iD, &pfd))

{

ATLASSERT(FALSE);

return -1;

}

//====== Пытаемся создать контекст передачи OpenGL

if ( !(m_hRC = wglCreateContext (m_hdc)))

{

ATLASSERT(FALSE);

return -1;

}

//====== Пытаемся выбрать его в качестве текущего

if ( !wglMakeCurrent (m_hdc, m_hRC))

{

ATLASSERT(FALSE);

return -1;

}

//====== Теперь можно посылать команды OpenGL

glEnable (GL_LIGHTING) ;

// Будет освещение

glEnable (GL_LIGHTO) ;

// Только 1 источник

glEnable (GL_DEPTH_TEST) ;

// Учитывать глубину (ось Z)

//====== Учитывать цвет материала поверхности

glEnable (GL_COLOR_MATERIAL) ;

//====== Устанавливаем цвет фона

SetBkColor () ;

bHandled = TRUE;

return 0;

}

Класс copenGL должен реагировать на сообщение WM_SIZE и корректировать видимый объем сцены. Мы будем использовать режим просмотра с учетом перспективы. Его определяет функция

gluPerspective. Введите в класс copenGL обработку WM_SIZE и вставьте в нее следующие

коды:

LRESULT COpenGL: :OnSize(UINT /*uMsg*/, WPARAM /*wParam*/,

LPARAM IParam, BOOL& bHandled)

{

// Распаковываем длинный параметр и узнаем размеры окна

UINT сх = LOWORD ( IParam) , су = HIWORD (IParam) ;

//====== Вычисляем максимальные диспропорции окна

double dAspect = cx<=cy ? double (су) /сх

: double (сх) /су;

//==== Задаем тип текущей матрицы (матрица проекции)

glMatrixMode (GL_PROJECTION) ;

//====== Приравниваем ее к единичной диагональной

glLoadldentity () ;

//== Параметры перспективы (45 градусов - угол обзора)

gluPerspective (45., dAspect, 1., 10000.);

glViewport (0, 0, сх, су); DrawScene {) ;

bHandled = TRUE;

return 0;

}

Функция glViewport, как вы помните, задает прямоугольник просмотра. При закрытии окна внедренного объекта необходимо освободить память, занимаемую контекстом передачи, и отказаться от услуг таймера, с помощью которого мы будем производить анимацию вращения изображения. Введите в класс обработчик сообщения WM_DESTROY и измените ее стартовый код, как показано ниже:




Начало  Назад  Вперед



Книжный магазин