CSDN博客

img huyoo

MFC之OpenGL入门程序

发表于2004/6/23 2:57:00  7315人阅读

分类: C Family

我在网上浏览过很多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编程所必须做好的基本工作^_*

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

 

0 0

相关博文

我的热门文章

img
取 消
img