用于开发使用 WTL 的 OpenGL 程序的 WTL 类






4.85/5 (9投票s)
2001年10月2日
2分钟阅读

112137

3347
一个可以轻松插入到您的 WTL 程序中的 OpenGL 程序开发类。
概述
最近,我研究了如何编写 OpenGL 程序。我尝试过 GLUT,这是一个与窗口系统无关的 OpenGL 程序编写工具包。但我不太喜欢它,因为它采用 C 风格,并且需要额外的 glut32.dll 文件。我玩了很长时间 WTL,非常喜欢这个用于开发 Win32 程序的优秀框架,所以我决定使用 WTL 编写 OpenGL 程序。
实际上,WTL 在 atlgdi.h
中确实提供了 OpenGL 支持。如果您没有定义 _ATL_NO_OPENGL
,您应该可以使用 ChoosePixelFormat
、wglCreateContext
等函数。但是,每次编写 OpenGL 程序都需要做很多工作。为了简化操作,我开发了一个类 COpenGL
,它可以轻松地插入到您的 WTL 程序中。
使用 COpenGL
COpenGL
是一个模板类,它实现了 OpenGL 所需的大部分必要工作。它定义在 atlopengl.h
中。要在您的程序中使用它,您需要执行以下步骤:(假设您的主程序是 Cube.cpp
,您的 OpenGL 窗口是 CMainFrame
。)
- 将
atlopengl.h
复制到WTL\include
目录。 - 在
Cube.cpp
文件中添加#include <atlopengl.h>
。 - 将您的 OpenGL 窗口
CMainFrame
从COpenGL<CMainFrame>
派生。 - 通过在
CMainFrame
的消息映射中添加CHAIN_MSG_MAP(COpenGL<CMainFrame>)
将消息映射链到COpenGL
。 - 如果您在
CMainFrame
中实现了OnCreate
函数,请在return 0;
之前设置bHandled = FALSE;
- 在
CMainFrame
中实现三个函数:OnInit()
、OnRender()
和OnResize()
- (可选)如果您想进行动画,请将
CMainFrame
从CIdleHandler
派生并实现OnIdle
。此外,在Cube.cpp
中将CMessageLoop
更改为CGLMessageLoop
。(您必须这样做,否则无法获得动画)。
atlopengl.h
和演示项目以获取更多详细信息。结论
atlopengl.h
仍然非常简单,但它是使用 WTL 编写 OpenGL 程序的良好开端。注释
演示项目中的部分代码由 Ulf Öhlén 开发的“OpenGL AppWizard”生成。有关详细信息,请参阅 此处。