您的位置:首页 > 运维架构

学习OpenGL总结二

2009-01-09 23:14 423 查看
学习OpenGL总结二

OpenGL_FirstWin32.cpp : 定义应用程序的入口点

//OpenGL Framework 

//OpenGL 框架类

#include "stdafx.h"

#include "OpenGL_FirstWin32.h"

#include "DrawGLScene_3D.h"

#include "DrawGLScene_贴图.h"

OpenGLFrameWork* GLFW;

LRESULT CALLBACK WndProc( HWND hWnd,  // 窗口的句柄

                          UINT uMsg, // 窗口的消息

                          WPARAM wParam, // 附加的消息内容

                          LPARAM lParam) // 附加的消息内容



    switch (uMsg) // 检查Windows消息

    {  

        case WM_ACTIVATE: // 监视窗口激活消息

        {

            if (!HIWORD(wParam)) // 检查最小化状态

            {

                GLFW->active=TRUE; // 程序处于激活状态

            }

            else

            {

                GLFW->active=FALSE; // 程序不再激活

            }

            return 0; // 返回消息循环

        } 

        case WM_SYSCOMMAND:// 中断系统命令Intercept System Commands

        {

            switch (wParam) // 检查系统调用Check System Calls

            {

                case SC_SCREENSAVE: // 屏保要运行?

                case SC_MONITORPOWER: // 显示器要进入节电模式?

                    return 0; // 阻止发生

            }

            break; // 退出

        } 

        case WM_CLOSE: //收到Close消息?

        {

            PostQuitMessage(0); // 发出退出消息

            return 0; 

        } 

        case WM_KEYDOWN: // 有键按下么?

        {

            GLFW->keys[wParam] = TRUE; // 如果是,设为TRUE

            return 0; // 返回

        }  

        case WM_KEYUP: // 有键放开么?

        {

            GLFW->keys[wParam] = FALSE; // 如果是,设为FALSE

            return 0; // 返回

        }  

        case WM_SIZE:  // 调整OpenGL窗口大小

        {

            GLFW->ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height 

            return 0; // 返回

        }

    }

    //向 DefWindowProc传递所有未处理的消息。

    return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

//下面是我们的Windows程序的入口。将会调用窗口创建例程,处理窗口消息,并监视人机交互。

int WINAPI WinMain( HINSTANCE hInstance,//实例

                    HINSTANCE hPrevInstance,// 前一个实例

                    LPSTR lpCmdLine, // 命令行参数

                    int nCmdShow) // 窗口显示状态

{  

    MSG msg;         // Windowsx消息结构

    BOOL done=FALSE; // 用来退出循环的Bool 变量 

    //GLFW=new OpenGLFrameWork();

    GLFW=new OpenGLFrameWork_3D();

    //GLFW=new OpenGLFrameWork_TT();

    

    // 提示用户选择运行模式

    if (MessageBox(NULL,(LPCWSTR)"Would You Like To Run In Fullscreen Mode?", (LPCWSTR)"Start 

FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)

    {

        GLFW->fullscreen=FALSE; //窗口模式

    }

    //创建OpenGL窗口

    if (!GLFW->CreateGLWindow("NeHe's OpenGL Framework",640,480,16,GLFW->fullscreen))

    {

        return 0; // 失败退出

    }

    while(!done) //保持循环直到 done=TRUE

    {

        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

        {//有消息在等待吗?

            if (msg.message==WM_QUIT)//收到退出消息?

            {

                done=TRUE;  // 是,则done=TRUE

            }

            else   // 不是,处理窗口消息

            {   //如果不是退出消息,我们翻译消息,然后发送消息,使得WndProc() 或 Windows能够

处理他们。

                TranslateMessage(&msg);// 翻译消息

                DispatchMessage(&msg); // 发送消息

            }

        }

        else // 如果没有消息

        {  

            //如果没有消息,绘制我们的OpenGL场景。代码的第一行查看窗口是否激活。如果按下ESC键

,done变量被设为TRUE,程序将会退出。 

            // 绘制场景。监视ESC键和来自DrawGLScene()的退出消息

            if (GLFW->active) // 程序激活的么?

            {

                if (GLFW->keys[VK_ESCAPE]) // ESC 按下了么?

                {

                    done=TRUE;  // ESC 发出退出信号

                }

                else// 不是退出的时候,刷新屏幕

                {  

                    //DrawGLScene();// 绘制场景

                    GLFW->DrawGLScene();// 绘制3D场景

                    SwapBuffers(GLFW->hDC);// 交换缓存 (双缓存)

                }

            }

            if (GLFW->keys[VK_F1])//  F1键按下了么?

            {

                GLFW->keys[VK_F1]=FALSE;// 若是,使对应的Key数组中的值为 FALSE

                GLFW->KillGLWindow();// 销毁当前的窗口

                GLFW->fullscreen=!GLFW->fullscreen;// 切换 全屏 / 窗口 模式

                // 重建 OpenGL 窗口  第一课内容

                /*if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen)) 

// 如果窗口未能创建,程序退出

                {

                    return 0;

                }*/

                //NeHe's First Polygon Tutorial  第二课内容

                if (!GLFW->CreateGLWindow("NeHe's First Polygon 

Tutorial",640,480,16,GLFW->fullscreen)) // 如果窗口未能创建,程序退出

                {

                    return 0;

                }

            }

        }

    } //end while

    // 关闭程序

    GLFW->KillGLWindow();      // 销毁窗口

    return (msg.wParam); // 退出程序

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows null 框架