使用vc6开发opengl工程

使用vc6开发opengl工程

From:http://blog.chinaunix.net/u/15586/showart_206394.html

// 使用vc6开发opengl工程[原创]
// 首先要在工程设置连接中加入opengl32.lib
// 微软在Visual C++中已提供了三个OpenGL的函数库(glu32.lib, glau.lib,OpenGL32.lib)
// 注意要加入头文件#i nclude <gl/gl.h>
// 因为gl.h文件在vc的include 下面的gl目录下面
// 下面是一个基于win32的例子
/**/ /**************************
 * Includes
 *
 *************************
*/


#i nclude 
< windows.h >
#i nclude 
< gl / gl.h >


/**/ /**************************
 * Function Declarations
 *
 *************************
*/


LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void  EnableOpenGL (HWND hWnd, HDC  * hDC, HGLRC  * hRC);
void  DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


/**/ /**************************
 * WinMain
 *
 *************************
*/


int  WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    
int  iCmdShow)
{
    WNDCLASS wc;
    HWND hWnd;
    HDC hDC;
    HGLRC hRC;        
    MSG msg;
    BOOL bQuit 
= FALSE;
    
float theta = 0.0f;

    
/**//* register window class */
    wc.style 
= CS_OWNDC;
    wc.lpfnWndProc 
= WndProc;
    wc.cbClsExtra 
= 0;
    wc.cbWndExtra 
= 0;
    wc.hInstance 
= hInstance;
    wc.hIcon 
= LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor 
= LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground 
= (HBRUSH) GetStockObject (BLACK_BRUSH);
    wc.lpszMenuName 
= NULL;
    wc.lpszClassName 
= "GLSample";
    RegisterClass (
&wc);

    
/**//* create main window */
    hWnd 
= CreateWindow (
      
"GLSample""OpenGL Sample"
      WS_CAPTION 
| WS_POPUPWINDOW | WS_VISIBLE,
      
00256256,
      NULL, NULL, hInstance, NULL);

    
/**//* enable OpenGL for the window */
    EnableOpenGL (hWnd, 
&hDC, &hRC);

    
/**//* program main loop */
    
while (!bQuit)
    
{
        
/**//* check for messages */
        
if (PeekMessage (&msg, NULL, 00, PM_REMOVE))
        
{
            
/**//* handle or dispatch messages */
            
if (msg.message == WM_QUIT)
            
{
                bQuit 
= TRUE;
            }

            
else
            
{
                TranslateMessage (
&msg);
                DispatchMessage (
&msg);
            }

        }

        
else
        
{
            
/**//* OpenGL animation code goes here */

            glClearColor (
0.0f0.0f0.0f0.0f);
            glClear (GL_COLOR_BUFFER_BIT);

            glPushMatrix ();
            glRotatef (theta, 
0.0f0.0f1.0f);
            glBegin (GL_TRIANGLES);
            glColor3f (
1.0f0.0f0.0f);   glVertex2f (0.0f1.0f);
            glColor3f (
0.0f1.0f0.0f);   glVertex2f (0.87f-0.5f);
            glColor3f (
0.0f0.0f1.0f);   glVertex2f (-0.87f-0.5f);
            glEnd ();
            glPopMatrix ();

            SwapBuffers (hDC);

            theta 
+= 1.0f;
            Sleep (
1);
        }

    }


    
/**//* shutdown OpenGL */
    DisableOpenGL (hWnd, hDC, hRC);

    
/**//* destroy the window explicitly */
    DestroyWindow (hWnd);

    
return msg.wParam;
}



/**/ /********************
 * Window Procedure
 *
 *******************
*/


LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                          WPARAM wParam, LPARAM lParam)
{

    
switch (message)
    
{
    
case WM_CREATE:
        
return 0;
    
case WM_CLOSE:
        PostQuitMessage (
0);
        
return 0;

    
case WM_DESTROY:
        
return 0;

    
case WM_KEYDOWN:
        
switch (wParam)
        
{
        
case VK_ESCAPE:
            PostQuitMessage(
0);
            
return 0;
        }

        
return 0;

    
default:
        
return DefWindowProc (hWnd, message, wParam, lParam);
    }

}



/**/ /*******************
 * Enable OpenGL
 *
 ******************
*/


void  EnableOpenGL (HWND hWnd, HDC  * hDC, HGLRC  * hRC)
{
    PIXELFORMATDESCRIPTOR pfd;
    
int iFormat;

    
/**//* get the device context (DC) */
    
*hDC = GetDC (hWnd);

    
/**//* set the pixel format for the DC */
    ZeroMemory (
&pfd, sizeof (pfd));
    pfd.nSize 
= sizeof (pfd);
    pfd.nVersion 
= 1;
    pfd.dwFlags 
= PFD_DRAW_TO_WINDOW | 
      PFD_SUPPORT_OPENGL 
| PFD_DOUBLEBUFFER;
    pfd.iPixelType 
= PFD_TYPE_RGBA;
    pfd.cColorBits 
= 24;
    pfd.cDepthBits 
= 16;
    pfd.iLayerType 
= PFD_MAIN_PLANE;
    iFormat 
= ChoosePixelFormat (*hDC, &pfd);
    SetPixelFormat (
*hDC, iFormat, &pfd);

    
/**//* create and enable the render context (RC) */
    
*hRC = wglCreateContext( *hDC );
    wglMakeCurrent( 
*hDC, *hRC );

}



/**/ /******************
 * Disable OpenGL
 *
 *****************
*/


void  DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent (NULL, NULL);
    wglDeleteContext (hRC);
    ReleaseDC (hWnd, hDC);
}

你可能感兴趣的:(使用vc6开发opengl工程)