且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用vc6开发opengl工程

更新时间:2022-09-01 18:27:04

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

使用vc6开发opengl工程
使用vc6开发opengl工程#i nclude 
<windows.h>
使用vc6开发opengl工程#i nclude 
<gl/gl.h>
使用vc6开发opengl工程
使用vc6开发opengl工程
使用vc6开发opengl工程
/**************************
使用vc6开发opengl工程 * Function Declarations
使用vc6开发opengl工程 *
使用vc6开发opengl工程 *************************
*/

使用vc6开发opengl工程
使用vc6开发opengl工程LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
使用vc6开发opengl工程WPARAM wParam, LPARAM lParam);
使用vc6开发opengl工程
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
使用vc6开发opengl工程
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
使用vc6开发opengl工程
使用vc6开发opengl工程
使用vc6开发opengl工程
/**************************
使用vc6开发opengl工程 * WinMain
使用vc6开发opengl工程 *
使用vc6开发opengl工程 *************************
*/

使用vc6开发opengl工程
使用vc6开发opengl工程
int WINAPI WinMain (HINSTANCE hInstance,
使用vc6开发opengl工程                    HINSTANCE hPrevInstance,
使用vc6开发opengl工程                    LPSTR lpCmdLine,
使用vc6开发opengl工程                    
int iCmdShow)
使用vc6开发opengl工程
{
使用vc6开发opengl工程    WNDCLASS wc;
使用vc6开发opengl工程    HWND hWnd;
使用vc6开发opengl工程    HDC hDC;
使用vc6开发opengl工程    HGLRC hRC;        
使用vc6开发opengl工程    MSG msg;
使用vc6开发opengl工程    BOOL bQuit = FALSE;
使用vc6开发opengl工程    float theta = 0.0f;
使用vc6开发opengl工程
使用vc6开发opengl工程    /* register window class */
使用vc6开发opengl工程    wc.style = CS_OWNDC;
使用vc6开发opengl工程    wc.lpfnWndProc = WndProc;
使用vc6开发opengl工程    wc.cbClsExtra = 0;
使用vc6开发opengl工程    wc.cbWndExtra = 0;
使用vc6开发opengl工程    wc.hInstance = hInstance;
使用vc6开发opengl工程    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
使用vc6开发opengl工程    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
使用vc6开发opengl工程    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
使用vc6开发opengl工程    wc.lpszMenuName = NULL;
使用vc6开发opengl工程    wc.lpszClassName = "GLSample";
使用vc6开发opengl工程    RegisterClass (&wc);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* create main window */
使用vc6开发opengl工程    hWnd = CreateWindow (
使用vc6开发opengl工程      "GLSample", "OpenGL Sample", 
使用vc6开发opengl工程      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
使用vc6开发opengl工程      0, 0, 256, 256,
使用vc6开发opengl工程      NULL, NULL, hInstance, NULL);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* enable OpenGL for the window */
使用vc6开发opengl工程    EnableOpenGL (hWnd, &hDC, &hRC);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* program main loop */
使用vc6开发opengl工程    while (!bQuit)
使用vc6开发opengl工程    {
使用vc6开发opengl工程        /* check for messages */
使用vc6开发opengl工程        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
使用vc6开发opengl工程        {
使用vc6开发opengl工程            /* handle or dispatch messages */
使用vc6开发opengl工程            if (msg.message == WM_QUIT)
使用vc6开发opengl工程            {
使用vc6开发opengl工程                bQuit = TRUE;
使用vc6开发opengl工程            }

使用vc6开发opengl工程            else
使用vc6开发opengl工程            {
使用vc6开发opengl工程                TranslateMessage (&msg);
使用vc6开发opengl工程                DispatchMessage (&msg);
使用vc6开发opengl工程            }

使用vc6开发opengl工程        }

使用vc6开发opengl工程        else
使用vc6开发opengl工程        {
使用vc6开发opengl工程            /* OpenGL animation code goes here */
使用vc6开发opengl工程
使用vc6开发opengl工程            glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
使用vc6开发opengl工程            glClear (GL_COLOR_BUFFER_BIT);
使用vc6开发opengl工程
使用vc6开发opengl工程            glPushMatrix ();
使用vc6开发opengl工程            glRotatef (theta, 0.0f, 0.0f, 1.0f);
使用vc6开发opengl工程            glBegin (GL_TRIANGLES);
使用vc6开发opengl工程            glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
使用vc6开发opengl工程            glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.87f, -0.5f);
使用vc6开发opengl工程            glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.87f, -0.5f);
使用vc6开发opengl工程            glEnd ();
使用vc6开发opengl工程            glPopMatrix ();
使用vc6开发opengl工程
使用vc6开发opengl工程            SwapBuffers (hDC);
使用vc6开发opengl工程
使用vc6开发opengl工程            theta += 1.0f;
使用vc6开发opengl工程            Sleep (1);
使用vc6开发opengl工程        }

使用vc6开发opengl工程    }

使用vc6开发opengl工程
使用vc6开发opengl工程    /* shutdown OpenGL */
使用vc6开发opengl工程    DisableOpenGL (hWnd, hDC, hRC);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* destroy the window explicitly */
使用vc6开发opengl工程    DestroyWindow (hWnd);
使用vc6开发opengl工程
使用vc6开发opengl工程    return msg.wParam;
使用vc6开发opengl工程}

使用vc6开发opengl工程
使用vc6开发opengl工程
使用vc6开发opengl工程
/********************
使用vc6开发opengl工程 * Window Procedure
使用vc6开发opengl工程 *
使用vc6开发opengl工程 *******************
*/

使用vc6开发opengl工程
使用vc6开发opengl工程LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
使用vc6开发opengl工程                          WPARAM wParam, LPARAM lParam)
使用vc6开发opengl工程
{
使用vc6开发opengl工程
使用vc6开发opengl工程    switch (message)
使用vc6开发opengl工程    {
使用vc6开发opengl工程    case WM_CREATE:
使用vc6开发opengl工程        return 0;
使用vc6开发opengl工程    case WM_CLOSE:
使用vc6开发opengl工程        PostQuitMessage (0);
使用vc6开发opengl工程        return 0;
使用vc6开发opengl工程
使用vc6开发opengl工程    case WM_DESTROY:
使用vc6开发opengl工程        return 0;
使用vc6开发opengl工程
使用vc6开发opengl工程    case WM_KEYDOWN:
使用vc6开发opengl工程        switch (wParam)
使用vc6开发opengl工程        {
使用vc6开发opengl工程        case VK_ESCAPE:
使用vc6开发opengl工程            PostQuitMessage(0);
使用vc6开发opengl工程            return 0;
使用vc6开发opengl工程        }

使用vc6开发opengl工程        return 0;
使用vc6开发opengl工程
使用vc6开发opengl工程    default:
使用vc6开发opengl工程        return DefWindowProc (hWnd, message, wParam, lParam);
使用vc6开发opengl工程    }

使用vc6开发opengl工程}

使用vc6开发opengl工程
使用vc6开发opengl工程
使用vc6开发opengl工程
/*******************
使用vc6开发opengl工程 * Enable OpenGL
使用vc6开发opengl工程 *
使用vc6开发opengl工程 ******************
*/

使用vc6开发opengl工程
使用vc6开发opengl工程
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
使用vc6开发opengl工程
{
使用vc6开发opengl工程    PIXELFORMATDESCRIPTOR pfd;
使用vc6开发opengl工程    int iFormat;
使用vc6开发opengl工程
使用vc6开发opengl工程    /* get the device context (DC) */
使用vc6开发opengl工程    *hDC = GetDC (hWnd);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* set the pixel format for the DC */
使用vc6开发opengl工程    ZeroMemory (&pfd, sizeof (pfd));
使用vc6开发opengl工程    pfd.nSize = sizeof (pfd);
使用vc6开发opengl工程    pfd.nVersion = 1;
使用vc6开发opengl工程    pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
使用vc6开发opengl工程      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
使用vc6开发opengl工程    pfd.iPixelType = PFD_TYPE_RGBA;
使用vc6开发opengl工程    pfd.cColorBits = 24;
使用vc6开发opengl工程    pfd.cDepthBits = 16;
使用vc6开发opengl工程    pfd.iLayerType = PFD_MAIN_PLANE;
使用vc6开发opengl工程    iFormat = ChoosePixelFormat (*hDC, &pfd);
使用vc6开发opengl工程    SetPixelFormat (*hDC, iFormat, &pfd);
使用vc6开发opengl工程
使用vc6开发opengl工程    /* create and enable the render context (RC) */
使用vc6开发opengl工程    *hRC = wglCreateContext( *hDC );
使用vc6开发opengl工程    wglMakeCurrent( *hDC, *hRC );
使用vc6开发opengl工程
使用vc6开发opengl工程}

使用vc6开发opengl工程
使用vc6开发opengl工程
使用vc6开发opengl工程
/******************
使用vc6开发opengl工程 * Disable OpenGL
使用vc6开发opengl工程 *
使用vc6开发opengl工程 *****************
*/

使用vc6开发opengl工程
使用vc6开发opengl工程
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
使用vc6开发opengl工程
{
使用vc6开发opengl工程    wglMakeCurrent (NULL, NULL);
使用vc6开发opengl工程    wglDeleteContext (hRC);
使用vc6开发opengl工程    ReleaseDC (hWnd, hDC);
使用vc6开发opengl工程}