main.cpp
上传用户:jsylhbnbhn
上传日期:2013-11-03
资源大小:119k
文件大小:4k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include "OpenGL.h"
  2. #include "stdafx.h"
  3. #include "HumanMotion.h"
  4. //////////////////////////////////////////////////////////
  5. OpenGL* m_OpenGL;
  6. HDC hDC; // GDI设备句柄,将窗口连接到 GDI( 图形设备接口)
  7. HGLRC hRC=NULL; // 渲染描述句柄,将OpenGL调用连接到设备描述表 
  8. HWND hWnd=NULL; // 保存 Windows 分配给程序的窗口句柄
  9. int Width = 800;// 窗口宽
  10. int Height= 600;// 窗口高
  11. int bits  = 16; // 颜色深度
  12. void GameLoop()
  13. {   MSG msg; 
  14.     BOOL fMessage;
  15.     PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
  16.     while(msg.message != WM_QUIT) // 消息循环
  17.     {   fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
  18.         if(fMessage) //有消息
  19. { TranslateMessage(&msg);
  20.               DispatchMessage(&msg);
  21. }
  22.         else 
  23. {
  24. m_OpenGL->Render(); //无消息
  25. }
  26.     }
  27. }
  28. LRESULT WINAPI MsgProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam )// 消息处理
  29. { switch(message)
  30. { case WM_CREATE: // 建立窗口
  31. hDC = GetDC(hWnd); // 获取当前窗口的设备句柄
  32. m_OpenGL->SetupPixelFormat(hDC);// 调用显示模式安装功能
  33. return 0; break;
  34. case WM_CLOSE: // 关闭窗口
  35. m_OpenGL->CleanUp(); // 结束处理
  36. PostQuitMessage(0);
  37. return 0; break;
  38. case WM_SIZE: // 窗口尺寸变化
  39. Height = HIWORD(lParam); // 窗口的高
  40. Width  = LOWORD(lParam); // 窗口的宽
  41. if (Height==0) Height=1; // 防止被0 除
  42. m_OpenGL->init(Width,Height);
  43. return 0; break;
  44. case WM_DESTROY: // 退出消息
  45.             PostQuitMessage(0);
  46.             return 0; break;
  47.         case WM_KEYUP: // 按ESC退出,全屏模式必需要加入的退出方式。
  48.             switch (wParam)
  49.             { case VK_ESCAPE:
  50. m_OpenGL->CleanUp(); // 结束处理
  51.     PostQuitMessage(0);
  52.     return 0;break;
  53.             } 
  54. default: break;
  55. }
  56. return (DefWindowProc(hWnd, message, wParam, lParam));
  57. }
  58. INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,INT )// WinMain程序入口
  59. {   // 注册窗口类
  60. bool fullScreen =TRUE;
  61. DWORD dwExStyle; // Window 扩展风格
  62. DWORD dwStyle; // Window 窗口风格
  63. RECT windowRect; // 窗口尺寸
  64. int nX=0,nY=0;
  65. /* if (MessageBox(NULL,"使用全屏模式吗?", "将进入OpenGL,选择显示模式",
  66.            MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL)==IDNO)
  67. {fullScreen =false;} // 选择窗口模式
  68. if (fullScreen) // 选择全屏模式
  69. { DEVMODE dmScr; // 设备模式
  70. memset(&dmScr,0,sizeof(dmScr)); // 确保内存分配
  71. dmScr.dmSize=sizeof(dmScr); // Devmode 结构的大小
  72. dmScr.dmPelsWidth = Width; // 屏幕宽
  73. dmScr.dmPelsHeight= Height; // 屏幕高
  74. dmScr.dmBitsPerPel= 16; // 色彩深度
  75. dmScr.dmDisplayFrequency=75; // 刷屏速度
  76. dmScr.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;
  77. if (ChangeDisplaySettings(&dmScr, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
  78. {fullScreen=FALSE;}
  79. dwExStyle=WS_EX_APPWINDOW; // Window 扩展风格
  80. dwStyle=WS_POPUP; // Window 窗口风格
  81. ShowCursor(FALSE); // 隐藏鼠标
  82. }
  83. else*/
  84. { dwExStyle=WS_EX_APPWINDOW|WS_EX_WINDOWEDGE; // 使窗口具有3D外观
  85. dwStyle=WS_OVERLAPPEDWINDOW; // 使用标准窗口
  86. //WS_OVERLAPPEDWINDOW是有标题栏,窗口菜单,最大、小化按钮和可调整尺寸的窗口
  87. int wid=GetSystemMetrics(SM_CXSCREEN); // 获取当前屏幕宽
  88. int hei=GetSystemMetrics(SM_CYSCREEN); // 获取当前屏幕高
  89. nX=(wid-Width)/2;nY=(hei-Height)/2; // 计算窗口居中用
  90. }
  91. //-------------------------------------------------------------------
  92. AdjustWindowRectEx(&windowRect,dwStyle,FALSE,dwExStyle);
  93. //根据窗口风格来调整窗口尺寸达到要求的大小
  94. char cc[]="tml";
  95.     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
  96.                       GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
  97.                       cc, NULL };
  98.     RegisterClassEx( &wc );
  99. m_OpenGL=new OpenGL();//
  100. hWnd = CreateWindowEx(NULL,cc,"3D显示窗口",
  101.   dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
  102.   nX, nY,Width, Height,
  103.   NULL,NULL,hInst,NULL); // 创建窗口
  104. ShowWindow( hWnd, SW_SHOWDEFAULT ); // 显示窗口
  105. UpdateWindow( hWnd ); // 刷新窗口
  106. HumanMotion hm;
  107. hm.pgl = m_OpenGL;
  108. hm.Start(); 
  109.     return 0;
  110. }