По окончании работы с OpenGL созданный контекст воспроизведения необходимо уничтожить. Для этого существует функция
BOOL wglDeleteContext ( HGLRC hGLRC );
Текущий контекст воспроизведения можно узнать при помощи функции HGLRC wglGetCurrentContext (); Ниже приводится пример программы, рисующей в окне ранее рассмотренную руку робота.
// File arml.cpp #include <windows.h> #include <gl\gl.h> #include <gl\glu.h>
LONG WINAPI wndProc ( HWND, UINT, WPARAM, LPARAM ); void setDCPixelFormat ( HDC ); void initializeRC ();
void drawBox ( GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); void drawScene ( HDC, int);
int WINAPI WinMain ( HINSTANCE hlnstance, HINSTANCE hPrevlnstance,
LPSTR cmdLine, int cmdShow )
{
static char appName Q = "Robot Arm"; WNDCLASS wc; HWND hWnd; MSG msg;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) wndProc; wc.cbClsExtra = 0; wc.cbWnd Extra = 0; wc.hlnstance = hlnstance;
wc.hlcon = Loadlcon ( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor ( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = appName;
RegisterClass ( &wc);
hWnd = CreateWindow ( appName, appName,
WS_OVERLAPPEDWINDOW | WS CLIPCHILDREN I WS CLIPSIBLINGS,
12. Pa6oTa c 6u6nnoTeKoi/i OpenG
CW_USE DE FAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hlnstance, NULL );
ShowWIndow ( hWnd, cmdShow ); UpdateWindow (hWnd );
while ( GetMessage ( &msg, NULL, 0, 0 )) {
TranslateMessage (&msg y, DispatchMessage (&msg );
}
return msg.wParam;
}
LONG WINAPI wndProc ( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM IParam )
{
static HDC hdc; static HGLRC hrc; PAINTSTRUCT ps; GLdouble aspect; GLsizei width, height;
static int angle = 0;
switch (msg ) {
case WM_CREATE:
hdc = GetDC ( hWnd ); setDCPixelFormat (hdc); hrc = wgICreateContext ( hdc ); ReleaseDC ( hWnd, hdc ); return 0;
case WM_SIZE:
hdc = GetDC ( hWnd ); wglMakeCurrent ( hdc, hrc );