MFC и OpenGL | страница 3



> glColor3f(1.0f, 1.0f, 1.0f);

> glVertex3f(0.5f, 0.5f, 0.0f);

> glColor3f(0.0f, 1.0f, 1.0f);

> glVertex3f(0.5f, –0.5f, 0.0f);

> glColor3f(0.0f, 0.0f, 1.0f);

> glVertex3f(-0.5f, –0.5f, 0.0f);

> glEnd();

> glFinish();

> SwapBuffers(wglGetCurrentDC());

> angle += 0.5f;

>}

По моему проще уже некуда. Я надеюсь, что все ясно.

Ну вот казалось бы и все. Единственное, что остается сделать – убраться за собой. Т.е. надо при выходе удалить контекст рендеринга и убить таймер.

Эти вещи надо сделать в 2-х обработчиках OnClose и OnDestroy. Посмотрим на них:

>void CBitScrollDlg::OnClose() {

> // TODO: Add your message handler code here and/or call default

> HGLRC hrc;

> KillTimer(1);

> hrc = ::wglGetCurrentContext();

> ::wglMakeCurrent(NULL, NULL);

> if (hrc) ::wglDeleteContext(hrc);

> CDialog::OnClose();

>}

и

>void CBitScrollDlg::OnDestroy() {

> CDialog::OnDestroy();

> // TODO: Add your message handler code here

> HGLRC hrc;

> KillTimer(1);

> hrc = ::wglGetCurrentContext();

> ::wglMakeCurrent(NULL, NULL);

> if (hrc) ::wglDeleteContext(hrc);

>}

Она практически одинаковые. Работают так же как и case WM_CLOSE в Win32API. Т.е. убиваем таймер, получаем контекст рендеринга, если он есть – удаляем его.

Ну вот и все. Еще добавлю, что в проекте есть функция OnSize для обработки изменений размеров окна. В данном случае она не нужна, но если вставлять OpenGL в SDI или MDI, то она вам понадобится.