MFC之OpenGL入门程序

原创 2004年06月23日 02:57:00

我在网上浏览过很多OpenGL的入门程序,不是控制台的就是Windows C编程的,觉得很不方便.所以在这里给大家一个OpenGL的MFC入门程序:)

注:windows下面的OpenGl编程的原理,我这里不讲了.请参考有关书籍:D

我知道,那些控制台程序和Windows C程序,创建的窗口是很简单的窗口.

这里先叙述一下创建步骤:

1.新建一个MFC向导程序,命名为GLFrame,单文档,去除打印支持,其余默认,生成一个OpenGL框架.

2.得到简单的窗口风格.

   在CMianFrame中添加PreCreateWindow的代码:

   BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
 if( !CFrameWnd::PreCreateWindow(cs) )
  return FALSE;

 cs.cx =500;
 cs.cy =400;
 cs.lpszName =_T("OpenGL 框架程序");
 cs.style &=~FWS_ADDTOTITLE;//不把标题加到标题栏
 return TRUE;
}

3.添加OpenGL支持:

在CGLFrameView.h中添加头文件如下:

#include "gl/gl.h"
#include "gl/glu.h"
#include "gl/glaux.h"

在工程->设置->Project Settings对话框话中选择Link选项卡,在对象模块库中加入glaux.lib  glu32.lib opengl32.lib .

(TIP:当然,你也可以选择工程->添加到工程->添加文件命令,弹出的Insert Files into Project对话框中,转换到VC98/lib目录下面,选中glaux.lib , glu32.lib, opengl32.lib 这几个文件,按下OK,把它们添加到项目文件.)

(先写到这里,今天没有时间,明天接着写)

今天2004/6/25

以下操作均在CGLFrameView中进行

4.给视图添加一个RC句柄,一个公共的变量

class CGLFrameView:public CView

{

public:

   ...//其他变量

   HGLRC hglrc;

   ...//其他变量

}

5.给视图添加消息处理:

使用ClassWizard添加WM_CREATE,WM_DESTROY,WM_SIZE这三个消息的处理函数.

6.修改CGFrameView的PreCreateWindow() 函数如下:

BOOL CGLFrameView::PreCreateWindow(CREATESTRUCT& cs)
{
 // TODO: Modify the Window class or styles here by modifying
 //  the CREATESTRUCT cs

 cs.style |=WS_CLIPSIBLINGS|WS_CLIPCHILDREN;
 return CView::PreCreateWindow(cs);
}

7.修改CGFrameView的OnCreate()函数如下:

int CGLFrameView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;
//=================================== 
 PIXELFORMATDESCRIPTOR pfd=
 {
  sizeof(PIXELFORMATDESCRIPTOR),
  1,
  PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
  PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI,
  PFD_TYPE_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 clientdc(this);
 int pf =ChoosePixelFormat(clientdc.m_hDC,&pfd);
 BOOL rt=SetPixelFormat(clientdc.m_hDC,pf,&pfd);
 hglrc=wglCreateContext(clientdc.m_hDC);
//======================================================= 
 return 0;
}
8.修改CGFrameView的OnDestroy()函数如下:

void CGLFrameView::OnDestroy()
{
 CView::OnDestroy();
 
 // TODO: Add your message handler code here
 if(wglGetCurrentContext()!=NULL)
  wglMakeCurrent(NULL,NULL);
 if(hglrc!=NULL)
 {
  wglDeleteContext(hglrc);
  hglrc=NULL;
 }
}

9.修改CGFrameView的OnSize()函数如下:

void CGLFrameView::OnSize(UINT nType, int cx, int cy)
{
 CView::OnSize(nType, cx, cy);

 GLsizei w=cx;
 GLsizei h=cy;
 if(!h)
  return ;
 CClientDC clientDC(this);
 wglMakeCurrent(clientDC.m_hDC,hglrc);
 glViewport(0,0,w,h);
 wglMakeCurrent(NULL,NULL);
/**/ 
 
}

以上是用OpenGL编程所必须做好的基本工作^_*

明天加入画直线和画茶壶的部分,完成好这个例子.

 

关于如何看懂mfc程序 初学mfc入门

本文适合初学者阅读,本人也算初学者,刚看出一点门道,献丑了,只求抛砖引玉吧! mfc因为是基于C++面向对象设计的,所以程序中充斥着很多函数名!  库函数之间相互调用!程序本身会根据需要也定义一些函数...
  • jingmiaa
  • jingmiaa
  • 2016年03月09日 15:57
  • 4764

VS2010/MFC编程入门系列教程

http://www.jizhuomi.com/software/257.html VS2010/MFC编程入门教程之目录和总结        鸡啄米的这套VS2010/MFC编程入...
  • zy1049677338
  • zy1049677338
  • 2017年02月09日 11:19
  • 3408

OpenGL入门【1 快速入门】

// OpenGL.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using n...
  • yixiantian7
  • yixiantian7
  • 2014年06月02日 09:36
  • 1384

OpenGL入门14——MFC窗口中使用glut函数

调用glut函数前,要初始化glut,即调用glutInit(); 例如:         int argc=1; char* argv[]={"good"}; glutInit(&argc, arg...
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2015年04月23日 20:13
  • 2882

MFC单文档程序中搭建OpenGL框架

一、简介 Windows GDI是通过设备句柄(Device Context(设备描述表)以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context(着色描述表)...
  • qq_28088659
  • qq_28088659
  • 2017年01月17日 09:04
  • 294

VS2013用MFC制作包含菜单的OpenGL程序

打开VS2013新建项目 MFC程序:命名为:MFCOpenGLDemo 单击确定 下一步建一个基于对话框的程序 单击完成:...
  • Tan_HandSome
  • Tan_HandSome
  • 2015年08月01日 09:42
  • 1623

如何在MFC对话框程序里采用OpenGL绘图

网上可以搜到很多介绍在MFC单文档/多文档程序里如何设置OpenGL绘图的方法,但是对话框MFC程序的与之有很大不同。下面的代码会示例如何在对话框程序里设置OpenGL。请注意几个重要的地方:1. 消...
  • yyangman
  • yyangman
  • 2011年06月30日 08:43
  • 1536

MFC对话框程序中使用OpenGL

在MFC的对话框程序中需要使用OpenGL在某个对话框中作图,综合和网上的两篇文章的内容(文章一,文章二),也有自己的心得体会。         首先需要配置好opengl的环境,程序中会使用到gla...
  • u012501459
  • u012501459
  • 2013年12月02日 13:50
  • 2159

MFC对话框程序中使用opengl实现漫游

忙活了一个下午和晚上,终于在之前的MFC对话框工程中实现了漫游的功能,虽然只是简单的照相机前进后退左右移动的功能,虽然很多代码是网上的,但是最终把功能加到这个MFC对话框程序中了,还是可喜可贺的。主要...
  • u012501459
  • u012501459
  • 2013年12月02日 23:21
  • 1410

mfc/cuda/opengl程序

  • 2012年07月29日 12:02
  • 11.54MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC之OpenGL入门程序
举报原因:
原因补充:

(最多只允许输入30个字)