学习OpenGL总结二

  1. 学习OpenGL总结二
  2. OpenGL_FirstWin32.cpp : 定义应用程序的入口点
  3. //OpenGL Framework 
  4. //OpenGL 框架类
  5. #include "stdafx.h"
  6. #include "OpenGL_FirstWin32.h"
  7. #include "DrawGLScene_3D.h"
  8. #include "DrawGLScene_贴图.h"
  9. OpenGLFrameWork* GLFW;
  10. LRESULT CALLBACK WndProc( HWND hWnd,  // 窗口的句柄
  11.                           UINT uMsg, // 窗口的消息
  12.                           WPARAM wParam, // 附加的消息内容
  13.                           LPARAM lParam) // 附加的消息内容
  14.     switch (uMsg) // 检查Windows消息
  15.     {  
  16.         case WM_ACTIVATE: // 监视窗口激活消息
  17.         {
  18.             if (!HIWORD(wParam)) // 检查最小化状态
  19.             {
  20.                 GLFW->active=TRUE; // 程序处于激活状态
  21.             }
  22.             else
  23.             {
  24.                 GLFW->active=FALSE; // 程序不再激活
  25.             }
  26.             return 0; // 返回消息循环
  27.         } 
  28.         case WM_SYSCOMMAND:// 中断系统命令Intercept System Commands
  29.         {
  30.             switch (wParam) // 检查系统调用Check System Calls
  31.             {
  32.                 case SC_SCREENSAVE: // 屏保要运行?
  33.                 case SC_MONITORPOWER: // 显示器要进入节电模式?
  34.                     return 0; // 阻止发生
  35.             }
  36.             break// 退出
  37.         } 
  38.         case WM_CLOSE: //收到Close消息?
  39.         {
  40.             PostQuitMessage(0); // 发出退出消息
  41.             return 0; 
  42.         } 
  43.         case WM_KEYDOWN: // 有键按下么?
  44.         {
  45.             GLFW->keys[wParam] = TRUE; // 如果是,设为TRUE
  46.             return 0; // 返回
  47.         }  
  48.         case WM_KEYUP: // 有键放开么?
  49.         {
  50.             GLFW->keys[wParam] = FALSE; // 如果是,设为FALSE
  51.             return 0; // 返回
  52.         }  
  53.         case WM_SIZE:  // 调整OpenGL窗口大小
  54.         {
  55.             GLFW->ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height 
  56.             return 0; // 返回
  57.         }
  58.     }
  59.     //向 DefWindowProc传递所有未处理的消息。
  60.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
  61. }
  62. //下面是我们的Windows程序的入口。将会调用窗口创建例程,处理窗口消息,并监视人机交互。
  63. int WINAPI WinMain( HINSTANCE hInstance,//实例
  64.                     HINSTANCE hPrevInstance,// 前一个实例
  65.                     LPSTR lpCmdLine, // 命令行参数
  66.                     int nCmdShow) // 窗口显示状态
  67. {  
  68.     MSG msg;         // Windowsx消息结构
  69.     BOOL done=FALSE; // 用来退出循环的Bool 变量 
  70.     //GLFW=new OpenGLFrameWork();
  71.     GLFW=new OpenGLFrameWork_3D();
  72.     //GLFW=new OpenGLFrameWork_TT();
  73.     
  74.     // 提示用户选择运行模式
  75.     if (MessageBox(NULL,(LPCWSTR)"Would You Like To Run In Fullscreen Mode?", (LPCWSTR)"Start 
  76. FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
  77.     {
  78.         GLFW->fullscreen=FALSE; //窗口模式
  79.     }
  80.     //创建OpenGL窗口
  81.     if (!GLFW->CreateGLWindow("NeHe's OpenGL Framework",640,480,16,GLFW->fullscreen))
  82.     {
  83.         return 0; // 失败退出
  84.     }
  85.     while(!done) //保持循环直到 done=TRUE
  86.     {
  87.         if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  88.         {//有消息在等待吗?
  89.             if (msg.message==WM_QUIT)//收到退出消息?
  90.             {
  91.                 done=TRUE;  // 是,则done=TRUE
  92.             }
  93.             else   // 不是,处理窗口消息
  94.             {   //如果不是退出消息,我们翻译消息,然后发送消息,使得WndProc() 或 Windows能够
  95. 处理他们。
  96.                 TranslateMessage(&msg);// 翻译消息
  97.                 DispatchMessage(&msg); // 发送消息
  98.             }
  99.         }
  100.         else // 如果没有消息
  101.         {  
  102.             //如果没有消息,绘制我们的OpenGL场景。代码的第一行查看窗口是否激活。如果按下ESC键
  103. ,done变量被设为TRUE,程序将会退出。 
  104.             // 绘制场景。监视ESC键和来自DrawGLScene()的退出消息
  105.             if (GLFW->active) // 程序激活的么?
  106.             {
  107.                 if (GLFW->keys[VK_ESCAPE]) // ESC 按下了么?
  108.                 {
  109.                     done=TRUE;  // ESC 发出退出信号
  110.                 }
  111.                 else// 不是退出的时候,刷新屏幕
  112.                 {  
  113.                     //DrawGLScene();// 绘制场景
  114.                     GLFW->DrawGLScene();// 绘制3D场景
  115.                     SwapBuffers(GLFW->hDC);// 交换缓存 (双缓存)
  116.                 }
  117.             }
  118.             if (GLFW->keys[VK_F1])//  F1键按下了么?
  119.             {
  120.                 GLFW->keys[VK_F1]=FALSE;// 若是,使对应的Key数组中的值为 FALSE
  121.                 GLFW->KillGLWindow();// 销毁当前的窗口
  122.                 GLFW->fullscreen=!GLFW->fullscreen;// 切换 全屏 / 窗口 模式
  123.                 // 重建 OpenGL 窗口  第一课内容
  124.                 /*if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen)) 
  125. // 如果窗口未能创建,程序退出
  126.                 {
  127.                     return 0;
  128.                 }*/
  129.                 //NeHe's First Polygon Tutorial  第二课内容
  130.                 if (!GLFW->CreateGLWindow("NeHe's First Polygon 
  131. Tutorial",640,480,16,GLFW->fullscreen)) // 如果窗口未能创建,程序退出
  132.                 {
  133.                     return 0;
  134.                 }
  135.             }
  136.         }
  137.     } //end while
  138.     // 关闭程序
  139.     GLFW->KillGLWindow();      // 销毁窗口
  140.     return (msg.wParam); // 退出程序
  141. }

你可能感兴趣的:(学习OpenGL总结二)