ATL opengl

  1 #include <atlbase.h>
  2 #include <atlwin.h>
  3 #include <gl/glew.h>
  4 #include <gl/GL.h>
  5 #pragma comment(lib, "opengl32.lib")
  6 extern CComModule _Module;
  7 
  8 CComModule _Module;
  9 
 10 class MyWindow : public CWindowImpl<MyWindow, CWindow, CFrameWinTraits>
 11 {
 12 public:
 13     MyWindow()
 14         : m_hDC(0)
 15         , m_hGLRC(0)
 16     {
 17         Create(NULL, rcDefault);
 18     }
 19 public:
 20     DECLARE_WND_CLASS(_T("MyWindow"));
 21     BEGIN_MSG_MAP(MyWindow)
 22         MESSAGE_HANDLER(WM_CREATE, OnCreate)
 23         MESSAGE_HANDLER(WM_SIZE, OnSize)
 24         MESSAGE_HANDLER(WM_PAINT, OnPaint)
 25         MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
 26         MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
 27     END_MSG_MAP()
 28 public:
 29     LRESULT OnCreate(UINT msg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
 30     {
 31         m_hDC = GetDC();
 32         
 33         PIXELFORMATDESCRIPTOR pfd = {
 34             sizeof(PIXELFORMATDESCRIPTOR),  /* size */
 35             1,                              /* version */
 36             PFD_SUPPORT_OPENGL |
 37             PFD_DRAW_TO_WINDOW |
 38             PFD_DOUBLEBUFFER,               /* support double-buffering */
 39             PFD_TYPE_RGBA,                  /* color type */
 40             16,                             /* prefered color depth */
 41             0, 0, 0, 0, 0, 0,               /* color bits (ignored) */
 42             0,                              /* no alpha buffer */
 43             0,                              /* alpha bits (ignored) */
 44             0,                              /* no accumulation buffer */
 45             0, 0, 0, 0,                     /* accum bits (ignored) */
 46             16,                             /* depth buffer */
 47             0,                              /* no stencil buffer */
 48             0,                              /* no auxiliary buffers */
 49             PFD_MAIN_PLANE,                 /* main layer */
 50             0,                              /* reserved */
 51             0, 0, 0,                        /* no layer, visible, damage masks */
 52         };
 53         int pixelFormat = ChoosePixelFormat(m_hDC, &pfd);
 54         SetPixelFormat(m_hDC, pixelFormat, &pfd);
 55         m_hGLRC = wglCreateContext(m_hDC);
 56         if (!m_hGLRC)
 57         {
 58             PostQuitMessage(0);
 59         }
 60         wglMakeCurrent(m_hDC, m_hGLRC);
 61         glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
 62         return true;
 63     }
 64 
 65     LRESULT OnSize(UINT msg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
 66     {
 67         return true;
 68     }
 69 
 70     LRESULT OnPaint(UINT msg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
 71     {
 72         if (m_hGLRC)
 73         {
 74             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 75         }
 76         if (m_hDC)
 77             SwapBuffers(m_hDC);
 78         return true;
 79     }
 80 
 81     LRESULT OnEraseBkgnd(UINT msg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
 82     {
 83         
 84         return false;
 85     }
 86 
 87     LRESULT OnDestroy(UINT msg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
 88     {
 89         wglMakeCurrent(NULL, NULL);
 90         if (m_hGLRC)
 91             wglDeleteContext(m_hGLRC);
 92         if (m_hDC)
 93             ReleaseDC(m_hDC);
 94         m_hDC = 0;
 95         m_hGLRC = 0;
 96         PostQuitMessage(0);
 97         return true;
 98     }
 99 public:
100     void Show()
101     {
102         ShowWindow(SW_SHOW);
103         UpdateWindow();
104     }
105 private:
106     HDC  m_hDC;
107     HGLRC m_hGLRC;
108 };
109 
110 
111 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
112 {
113     _Module.Init(NULL, hInstance);
114     MyWindow win;
115     win.Show();
116     MSG msg;
117     while (GetMessage(&msg, NULL, 0, 0))
118     {
119         TranslateMessage(&msg);
120         DispatchMessage(&msg);
121     }
122     _Module.Term();
123     return 0;
124 }

 

posted @ 2015-10-08 09:55  20118281131  阅读(213)  评论(0编辑  收藏  举报