65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (9投票s)

2001年10月2日

2分钟阅读

viewsIcon

112137

downloadIcon

3347

一个可以轻松插入到您的 WTL 程序中的 OpenGL 程序开发类。

Sample Image

概述

最近,我研究了如何编写 OpenGL 程序。我尝试过 GLUT,这是一个与窗口系统无关的 OpenGL 程序编写工具包。但我不太喜欢它,因为它采用 C 风格,并且需要额外的 glut32.dll 文件。我玩了很长时间 WTL,非常喜欢这个用于开发 Win32 程序的优秀框架,所以我决定使用 WTL 编写 OpenGL 程序。

实际上,WTL 在 atlgdi.h 中确实提供了 OpenGL 支持。如果您没有定义 _ATL_NO_OPENGL,您应该可以使用 ChoosePixelFormatwglCreateContext 等函数。但是,每次编写 OpenGL 程序都需要做很多工作。为了简化操作,我开发了一个类 COpenGL,它可以轻松地插入到您的 WTL 程序中。

使用 COpenGL

COpenGL 是一个模板类,它实现了 OpenGL 所需的大部分必要工作。它定义在 atlopengl.h 中。要在您的程序中使用它,您需要执行以下步骤:(假设您的主程序是 Cube.cpp,您的 OpenGL 窗口是 CMainFrame。)

  • atlopengl.h 复制到 WTL\include 目录。
  • Cube.cpp 文件中添加 #include <atlopengl.h>
  • 将您的 OpenGL 窗口 CMainFrameCOpenGL<CMainFrame> 派生。
  • 通过在 CMainFrame 的消息映射中添加 CHAIN_MSG_MAP(COpenGL<CMainFrame>) 将消息映射链到 COpenGL
  • 如果您在 CMainFrame 中实现了 OnCreate 函数,请在 return 0; 之前设置 bHandled = FALSE;
  • CMainFrame 中实现三个函数:OnInit()OnRender()OnResize()
  • (可选)如果您想进行动画,请将 CMainFrameCIdleHandler 派生并实现 OnIdle。此外,在 Cube.cpp 中将 CMessageLoop 更改为 CGLMessageLoop。(您必须这样做,否则无法获得动画)。
您可以类似地在您的视图窗口中使用它。阅读 atlopengl.h 和演示项目以获取更多详细信息。

结论

atlopengl.h 仍然非常简单,但它是使用 WTL 编写 OpenGL 程序的良好开端。

注释

演示项目中的部分代码由 Ulf Öhlén 开发的“OpenGL AppWizard”生成。有关详细信息,请参阅 此处

© . All rights reserved.