MFC下基于OpenGL绘图程序的开发步骤和框架
基于MFC的Opengl编程

3D图形学基本概念PerspectivePerspective refers to the angles between the lines that lend the illusion of three dimensions.Colors and ShadingMoving beyond line drawing, we need to add color to create a solid object. Shading refers to the way the color is applied to the polygon. Shading can be of two types in OpenGL - Flat or Smooth.Lights and ShadowsPlain solid color doesn’t offer enough realism. By applying Lighting effects we can make objects appear as they would in reality depending on their material properties and the lighting parameters. Adding a shadow further increases realism.Texture MappingWith Texture Mapping we can have wood grains, cloth textures, brick like textures etc instead of plain materials. This technique of applying an image to the surface of a polygon is called Texture Mapping. The image we use is called the Texture and the individual elements of the texture are called Texels.FogFog is an atmospheric effect that adds haziness to objects in a scene depending on how far the objects are from the viewer.Blending and TransparencyBlending is the combination of colors of objects on the screen. This effect can be used for a variety of purposes. By varying the amount each object is blended with the scene we can make objects look transparent.Anti-AliasingAliasing is an effect that is visible on screen due to the fact that an image consists of discrete pixels. By carefully blending the lines with the background color we can eliminate jagged edges and give them a smooth appearance. This blending technique is called anti-aliasing.第一个OpenGL程序复制代码//Simple.cpp - First OpenGL Program#include <windows.h> //Required for every Windows Program#include <gl\glut.h> //Required for using the GLUT library//Perform OpenGL Initialization herevoid SetupRC(){//Set the background clearing color to blueglClearColor(0.0f,0.0f,1.0f,1.0f);//设置背景色为蓝色}//The drawing callback functionvoid RenderScene(){//Clear the color bufferglClear(GL_COLOR_BUFFER_BIT);//Flush the rendering pipelineglFlush();}void main(){//Choose the display mode settingsglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//初始化显示模式(单缓冲,RGB)//Create the WindowglutCreateWindow("Simple");//创建窗口//Set the RenderScsne function as the display callbackglutDisplayFunc(RenderScene);//绘制回调函数,当窗口需要绘制时,GLUT会调用此函数//Initialize OpenGLSetupRC();//初始化OpenGL//Start the GLUT frameworkglutMainLoop();//开始消息循环}WGL – Windows的OpenGL扩展层The WGL extension consists of a set of functions (wglCreateContext, wglDeleteContext etc.) and structures (such as PIXELFORMATDESCRIPTOR, GLYPHMETRICSFLOAT) etc. Thus every OpenGL implementation has a platform-specific portion which has to be set up and used according to the particular platform.设备上下文The Windows Graphical Device Interface (GDI) is capable of drawing to screen, to memory, to printers or to any other device that provides a GDI interface layer and that can process GDI calls. GDI accomplishes this by a rendering handle to the currently selected device, which is called the device context, or DC.绘制上下文A rendering context is the OpenGL equivalent of the GDI DC. All OpenGL calls are rendered to the device through a RC. The rendering context maintains OpenGL state variables such as current background color, current color etc. just as the DC maintains GDI state variables such as current pen, current brush etc.像素格式Pixel formats are the translation layer between OpenGL calls and the rendering operation that Windows performs.举个例子,若像素格式只支持很少一部分颜色值,则OpenGL在用RGB值(128,120,135)绘制一个像素时,就可能使用转换后的值(128,128,128)来绘制.The pixel format selected essentially describes such things as how colors are displayed, depth of field resolution and what additional capabilities are supported by the rendering context created.第一个基于MFC的OpenGL应用程开发环境:VC6.01,首先下载需要的GLUT头文件,DLL和Lib文件,下载链接: glutdlls37beta.zip (149 kilobytes),解压缩后把gltu.h放到"VC98/Include/GL"下,把glut.lib和glut32.lib放到"VC9/Lib" 下,glut32.dll和glut.dll放到你创建的应用程序的运行目录下2,创建一个MFC SDI应用程序,在项目属性中加入所需要链接的库文件1,在stdafx.h中加入下列语句://OpenGL Headers#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <gl/glaux.h>2,打开ClassWizard,选择CCY457OpenGLView类,为下述消息加入消息处理函数:WM_CREATE (for OnCreate), WM_DESTROY (for OnDestroy), WM_SIZE (for OnSize),WM_ERASEBACKGROUND (for OnEraseBkground).3,在窗口创建之前我们必须设置窗口风格包含WS_CLIPCHILDREN和WS_CLIPSIBLINGS,从而避免OpenGL绘制到其他窗口中去。
基于MFC的OpenGL绘图

基于MFC的OpenGL绘图本文更新版本请点击[置顶]《基于MFC的OpenGL编程》系列文章一、简介GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。
每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。
一旦在一个线程中指定了一个当前RC,在此线程中其后所有的OpenGL命令都使用相同的当前RC。
虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。
下面我将首先产生一个OpenGL RC并使之成为当前RC,这将分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。
二、MFC中的OpenGL基本框架1、首先创建工程用AppWizard产生一个MFC EXE项目,其他默认即可。
2、将此工程所需的OpenGL文件和库加入到工程中在工程菜单中,选择"Build"下的"Settings"项。
单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"opengl32.lib glu32.lib glut.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。
然后打开文件"stdafx.h",加入下列头文件:#include <gl\gl.h>#include <gl\glu.h>3、改写OnPreCreate函数并给视图类添加成员函数和成员变量OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。
基于MFC的OpenGL简易绘图系统

基于MFC的OpenGL简易绘图系统
尤王杰
【期刊名称】《计算机应用文摘》
【年(卷),期】2022(38)7
【摘要】文章研究了基于C++的基本类库MFC和OpenGL图形库建立面向对象的二维图形绘制应用程序,实现了简单多边形的绘制以及自由绘制等功能。
重点应用面向对象的编程思想和基于MFC的OpenGL图形库,希望为软件开发初学者以及绘图应用使用者提供一定的帮助。
【总页数】3页(P32-34)
【关键词】MFC;OPENGL;绘图系统;C++面向对象
【作者】尤王杰
【作者单位】苏州大学计算机科学与技术学院
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于MFC和OpenGL的相贯线焊接仿真系统设计
2.基于MFC和OpenGL的三维车载导航系统
3.基于OpenGL的三维绘图系统设计
4.基于MFC与OpenGL 的可视化机械仿真设计系统
5.基于OpenGL的三维绘图系统设计
因版权原因,仅展示原文概要,查看原文内容请购买。
MFC下基于OpenGL绘图程序的开发步骤和框架

。 能 体 整 和 识 意 任 责 员 高 提 范 规 描 位 岗 、 操 认 确 述 口 指 手 实 落 面 作 工 训 培 育 教 术 技 全 安 抓 狠 设 ”建 基 “双 化 深 断 不 , 织 组 合 理 管 学 科
int m_GLPixelIndex; 其它具体函数及其参数含义,大家可以通过 OpenGL 手册或者 MSDN 查询。这里不作累述。 (2)现在绘制窗口像素格式已经定义好,下一步工作是产生绘制上下文(RC)并使之成为当 前绘制上下文。在视类中加入一个私有型成员函数 BOOL CreateViewGLContext(HDC hDC)。 其中,m_hGLContext 为在视类中添加的一私有型的成员变量: HGLRC m_hGLContext;HGLRC 是一个指向 rendering context 的句柄。 (3)最后,在视类的 OnCreate 函数(OnCreate 函数相应 Window 消息 WM_CREATE,可以通 过 VC 的类向导 Class Wizard Ctrl+W 进行添加,如图)中实现上述两个函数的调用,实现 RC 的定义、产生以及和当前视区窗口 DC 的通讯。 6、添加绘图函数 视类函数 OnDraw 主要负责视区的绘图工作。为了在视区窗口利用 OpenGL 绘制图形,我 们自定义一个绘图函数 DrawScene(), 并 OnDraw 函数中调用该函数, 从而实现在视区窗口绘图。 7、修改视类 OnSize 函数 当视区绘图窗口大小变化时,应及时将新的窗口大小通知 OpenGL,才能在绘图窗口以正 确的比例显示图形。当视区窗口大小变化时,WM_SIZE 消息被触发,所以可以通过 VC 的类向 导 Class Wizard Ctrl+W 添加 WM_SIZE 的消息映射函数 OnSize。 然后对 OnSize 函数做修改。 8、修改视类 OnEraseBkgnd 函数 仿造第 7 步的方法通过类向导 Class Wizard 添加视类对消息 WM_ERASEBKGND 的映射函 数 OnEraseBkgnd,并对该函数进行修改。修改该函数的主要原因是:OpenGL 自身具有重绘能 力,通过修改该函数屏蔽 Window 的重绘操作,从而可以防止窗口频繁刷新时产生的闪烁现象。 9、回收 RC 所占用的资源 通过 VC 的类向导 Class Wizard Ctrl+W 添加 Window 消息 WM_DESTROY 的映射函数 OnDestroy 函数。在该函数中调用 OpenGL 函数 wglDeleteContext 对 RC 所占资源进行回收。注 意,回收之前需要先使用 OpenGL 函数 wglMakeCurrent 断开 RC 与 DC 的连接。 10、初始化绘图数据 编辑视类构造函数,初始化绘图数据。 至此,我们已构造好了框架,使该工程可以利用 OpenGL 进行绘图了。假设现在绘制一个 三角形,只需要在第 6 步添加的 DrawScene 函数中添加绘制三角形的函数, (二)生成三维物体 1) 首先,在 OnSize()中,把 gluOrtho2D(0.0, 500.0*aspect,0.0, 500.0)换成 gluPerspective(60, aspect, 1, 10.0);这样就实现了三维透视坐标系的设置。该语句说明了视点在原点,透视角是 60 度,近裁剪面在 z=1 处,远裁剪面在 z=10.0 处。 2) 在 DrawScene 函数中生成三维图形;
手把手教你搭建用MFC进行OpenGL编程的框架

手把手教你搭建用MFC进行OpenGL编程的框架手把手教你搭建用MFC进行OpenGL编程的框架第一步:创建项目文件File || New || Project || MFC AppWizard (exe) || 输入Project Name || 创建一个基于SDI,View类基于CView的工程文件;第二步:向项目文件中添加OpenGL的绘图函数Project || Settings || 在Object/library modules:中输入opengl32.lib,glu32.lib,glaux.lib,三者之间用空格隔开,逗号不用输入;第三步:添加一些代码1)在项目工作区的FileView中找到StdAfx.h,添加下面的代码:#include#include#include2)在项目工作区的ClassView中找到CView类,右击CView类,选择Add Member Vairable,添加一个成员变量HGLRC m_hRC;选择Add Member Founction,添加一个成员函数void DrawScene();3)在项目工作区的ClassView中找到CView类,右击CView类,选择Add Windows Message Handler,为CView类添加WM_CREATE,WM_DESTORY(方法:在左边的New windows message/events中选中并双击,然后点击OK)。
在项目工作区的ClassView中找到CView类,找到函数OnCreate(),在该函数中添加如下代码://定义像素存储格式PIXELFORMATDESCRIPTOR pfd={sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL,PFD_TYP E_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0,};CClientDC dc(this);int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC);同理找到函数OnDestory(),在该函数中添加下面的代码:wglDeleteContext(m_hRC);4)在类CView中的函数PreCreateWindows()中添加下面的代码: cs.style|=(WS_CLIPSIBLINGS|WS_CLIPCHILDREN);5)在类CView中的函数OnDraw()中添加下面的代码:wglMakeCurrent(pDC->m_hDC,m_hRC);DrawScene();//用户自定义的场景绘制函数wglMakeCurrent(pDC->m_hDC,NULL);这样,一个基于OpenGl标准的程序框架已经构造好了,用户只需在DrawScene()函数中添加程序代码即可。
对话框opengl

基于MFC对话框的OpenGL三维图形开发分类:VC MFC C++2013-05-26 21:15 3184人阅读评论(3) 收藏举报Visual Studio 2010MFC图形对话框上文中,,是在对话框的基础上,利用Picture控件进行OpenGL绘制的,,那么现在是基于一个新的类进行的OpenGL绘制,也有一个Demo,,是用GDI和OpenGL分别绘制的,,声明,,这是别人的Demo,拿来试用一下。
示例我也是学习了这些资料之后才懂得怎么做的。
以三维动态球体模型来讲述基于MFC对话框的OpenGL编程1.基本思想在Windows98/NT平台下,GDI是原始窗口的图形接口。
而GDI实现这些是通过一个设备描述表DC来实现的。
现在通过OpenGL绘图需要创建绘图描述表RC。
但是RC并不能直接完成绘图,只能与特定的DC联系起来,从而完成具体的绘图工作。
最后要注意释放RC 和DC。
2.编程步骤第一步,设置开发环境现在以Windows2000为例,首先将glu.dll,glu32.dll,glut.dll,glut32.dll,opengl32.dll文件拷贝到操作系统WINNT/System32目录下,将gl.h,glaux.h,glu.h,glut.h拷贝到Microsoft Visual Studio/VC98/Include/GL目录中中,将glaux.lib,glu32.lib,glut32.lib,opengl32.lib拷贝到Microsoft Visual Studio/VC98/Lib目录中;然后在编译程序的时候选择Project|Setting菜单,在Link标签中的Object/library modules编辑框中输入“opengl32.lib,glut32.lib ,glu32.lib,glaux.lib”。
到这时候环境就建立好了,可以进行下面的具体编程工作。
第二步,具体编程本实例采用基于对话框的工程。
opengl工作流程

OPENGL工作流程
OpenGL的工作流程大致如下:
1.根据基本图形单元建立景物模型,并且对所建立的模型进行数
学描述。
在OpenGL中,点、线、多边形、图像和位图都被视为基本图
形单元。
2.把景物模型放在三维空间中的合适的位置,并设置视点以观察
所感兴趣的景观。
3.计算模型中所有物体的色彩,其中的色彩根据应用要求来确
定,同时确定光照条件、纹理粘贴方式等。
4.把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象
素,这个过程也就是光栅化。
5.在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,
例如自动消隐处理等。
另外,景物光栅化之后被送入帧缓冲器之前还可
以根据需要对象素数据进行操作。
以上信息仅供参考,具体流程可能因实际需求和应用场景而有所不同,建议咨询专业人士获取准确信息。
基于MFC的OpenGL简易绘图系统

基于MFC的OpenGL简易绘图系统作者:尤王杰来源:《计算机应用文摘》2022年第07期关键词:MFC;OpenGL;绘图系统;C++面向对象中图法分类号:TP391 文献标识码:A1概述MFC 是微软公司开发的一个类库,以C++类的形式封装了Windows 的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中,MFC包含大量Windows 句柄封装类和很多Windows 的内建控件和组件的封装类[1] 。
OpenGL 是一个开放式图形库,是用于渲染2D 和3D 矢量图形的跨语言、跨平台的应用程序编程接口,是一个功能强大、支持底层绘制和造型能力的软件图形函数库。
它独立于硬件和窗口系统,为程序员进行图形学相关的程序编写提供了极大的帮助[2] 。
绘图软件一般指基于计算机绘制图形的软件,如Windows 自带的画图软件等。
它的开发语言和技术已经十分成熟。
本系统实现了基于基本类库MFC 和OpenGL 图形库面向对象的二维图形绘制应用程序,可以实现绘图的功能同时也可以让软件开发人员对软件开发过程有进一步了解。
2软件开发环境软件主要使用C++编程语言编写,使用了C++的基本库类MFC 和图形库OpenGL 以及C++常用库;开发软件的操作系统环境为Windows 10;软件的集成开发环境为Viusal Studio 2017;软件开发的硬件环境为16GB 内存,intel Core i5⁃9400F CPU(2.9GHz);软件支持跨平台使用,可以在不同操作系统中实现功能,同时可以进行本地保存[3] 。
3系统框架设计本系统采用了C++编程语言以及面向对象的编程风格,其基本思想是将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。
通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。
同时,面向对象能有效提高编程的效率,通过封装技术,可以更高效地开发出一个全新的系统[4] 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
打开工程中的头文件"stdafx.h",将下列头文件包含语句插入到该文件中。:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
4、改写视类的PreCreateWindow函数,并在视类中添加成员函数和成员变量
BOOL CreateViewGLContext(HDC hDC)。
其中,m_hGLContext为在视类中添加的一私有型的成员变量:
HGLRC m_hGLContext;HGLRC是一个指向rendering context的句柄。
(3)最后,在视类的OnCreate函数(OnCreate函数相应Window消息WM_CREATE,可以通过VC的类向导Class Wizard Ctrl+W进行添加,如图)中实现上述两个函数的调用,实现RC的定义、产生以及和当前视区窗口DC的通讯。
2、在工程中加入OpenGL所需库文件
在工程菜单中,选择"Project"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"OpenGL32.lib glu32.lib glaux.lib"(注意,输入双引号中的内容,各个库文件用空格分开;否则会出现链接错误),选择"OK"结束:
10、初始化绘图数据
编辑视类构造函数,初始化绘图数据。
至此,我们已构造好了框架,使该工程可以利用OpenGL进行绘图了。假设现在绘制一个三角形,只需要在第6步添加的DrawScene函数中添加绘制三角形的函数,
(二)生成三维物体
1)首先,在OnSize()中,把gluOrtho2D(0.0, 500.0*aspect,0.0, 500.0)换成gluPerspective(60, aspect, 1, 10.0);这样就实现了三维透视坐标系的设置。该语句说明了视点在原点,透视角是60度,近裁剪面在z=1处,远裁剪面在z=10.0处。
(1)先在视类(COpenGLView)中添加一个私有型的成员函数BOOL SetWindowPixelFormat(HDC hDC),并在其中进行视区窗口像素格式的定义,具体如下。
BOOL COpenGLView::SetWindowPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pixelDesc;
然后对OnSize函数做修改。
8、修改视类OnEraseBkgnd函数
仿造第7步的方法通过类向导Class Wizard添加视类对消息WM_ERASEBKGND的映射函数OnEraseBkgnd,并对该函数进行修改。修改该函数的主要原因是:OpenGL自身具有重绘能力,通过修改该函数屏蔽Window的重绘操作,从而可以防止窗口频繁刷新时产生的闪烁现象。
pixelDesc.cAccumRedBits = 16;
pixelDesc.cAccumGreenBits = 16;
pixelDesc.cAccumBlueBits = 16;
pixelDesc.cAccumAlphaBits = 0;
pixelDesc.cDepthBits = 32;
pixelDesc.cStencilBits = 8;
2)在DrawScene函数中生成三维图形;
三、程序运行结果
六、教师评语
签名:
日期:年月日
成绩
9、回收RC所占用的资源
通过VC的类向导Class Wizard Ctrl+W添加Window消息WM_DESTROY的映射函数OnDestroy函数。在该函数中调用OpenGL函数wglDeleteContext对RC所占资源进行回收。注意,回收之前需要先使用OpenGL函数wglMakeCurrent断开RC与DC的连接。
6、添加绘图函数
视类函数OnDraw主要负责视区的绘图工作。为了在视区窗口利用OpenGL绘制图形,我们自定义一个绘图函数DrawScene(),并OnDraw函数中调用该函数,从而实现在视区窗口绘图。7、修改视类OnSize函数
当视区绘图窗口大小变化时,应及时将新的窗口大小通知OpenGL,才能在绘图窗口以正确的比例显示图形。当视区窗口大小变化时,WM_SIZE消息被触发,所以可以通过VC的类向导Class Wizard Ctrl+W添加WM_SIZE的消息映射函数OnSize。
PFD_SUPPORT_GDI |
PFD_STEREO_DONTCARE;
pixelDesc.iPixelType = PFD_TYPE_RGBA;
olorBits = 32;
pixelDesc.cRedBits = 8;
pixelDesc.cRedShift = 16;
pixelDesc.cGreenBits = 8;
pixelDesc.cGreenShift = 8;
pixelDesc.cBlueBits = 8;
pixelDesc.cBlueShift = 0;
pixelDesc.cAlphaBits = 0;
pixelDesc.cAlphaShift = 0;
pixelDesc.cAccumBits = 64;
pixelDesc.cAuxBuffers = 0;
pixelDesc.iLayerType = PFD_MAIN_PLANE;
pixelDesc.bReserved = 0;
pixelDesc.dwLayerMask = 0;
pixelDesc.dwVisibleMask = 0;
pixelDesc.dwDamageMask = 0;
pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pixelDesc.nVersion = 1;
pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_DRAW_TO_BITMAP |
PFD_SUPPORT_OPENGL |
宁夏师范学院数学与计算机科学学院
《计算机图形学》实验报告
实验序号:2实验项目名称:MFC下基于OpenGL绘图程序的开发步骤和框架
学号
姓名
专业、班
实验地点
指导教师
时间
一、实验要求:
1、环境要求:Microsoft Visual C++ 6.0
二、实验内容与步骤
(一)1、的应用程序工程EXE文件,选择工程目录,并在工程名字中输入工程名,假设为OpenGL,保持其他的不变;第一步、选单文档(SDI);按Finish结束,工程创建完毕。
m_GLPixelIndex,
sizeof(PIXELFORMATDESCRIPTOR),
&pixelDesc) == 0 )
{
return FALSE;
}
}
if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc) == FALSE)
{
return FALSE;
OpenGL绘图窗口需要加上WS_CLIPCHILDREN和WS_CLIPSIBLINGS风格,便于窗口重绘。而修改视图窗口风格则需要在视类的PreCreateWindow函数中进行:
5、定义OpenGL的绘图上下文RC
产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将对这些参数的设置。
}
return TRUE;
}
其中,m_GLPixelIndex为在视类中添加的一私有型的成员变量:
int m_GLPixelIndex;
其它具体函数及其参数含义,大家可以通过OpenGL手册或者MSDN查询。这里不作累述。
(2)现在绘制窗口像素格式已经定义好,下一步工作是产生绘制上下文(RC)并使之成为当前绘制上下文。在视类中加入一个私有型成员函数
m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);
if (m_GLPixelIndex==0) // Let's choose a default index.
{
m_GLPixelIndex = 1;
if (DescribePixelFormat(hDC,