牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

使用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);
}

posted on 2007-04-07 21:44 杨粼波 阅读(852) 评论(1)  编辑 收藏 引用

评论

# re: 使用vc6开发opengl工程 2008-02-15 16:37 newcomer

可以加QQ么 我正在做IPMSG可是 以前没做过 想请教 我的QQ 335298238  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理