Введение обработчиков сообщений Windows
Теперь введите в класс обработчик сообщения WM_CREATE и заполните его кодами, которые готовят окно и устанавливают некоторые параметры OpenGL:
LRESULT COpenGL::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/,'LPARAM /*lParam*/, BOOL& bHandled) //======= Описатель формата окна OpenGL PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // Размер структуры 1, // Номер версии PFD_DRAW_TO_WINDOW | // Поддержка GDI PFD_SUPPORT_OPENGL | // Поддержка OpenGL PFD_DOUBLEBUFFER, // Двойная буферизация PFD_TYPE_RGBA, // Формат RGBA, не палитра 24, // Количество плоскостей // в каждом буфере цвета 24, 0, // Для компонента Red 24, 0, // Для компонента Green 24, 0, // Для компонента Blue 24, 0, // Для компонента Alpha 0, // Количество плоскостей // буфера Accumulation 0, // То же для компонента Red 0, // для компонента Green 0, // для компонента Blue 0, // для компонента Alpha 32, // Глубина Z-буфера 0, // Глубина буфера Stencil 0, // Глубина буфера Auxiliary 0, // Теперь игнорируется 0, // Количество плоскостей 0, // Теперь игнорируется 0, // Цвет прозрачной маски 0 // Теперь игнорируется }; // Добываем дежурный контекст и просим выбрать ближайший 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; }