用于开发使用 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”生成。有关详细信息,请参阅 此处。
