MFC
之
OpenGL
入门程序
创建步骤
:
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,
把它们添加到项目文件
.)
以下操作均在
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);
/**/
}
posted on 2007-02-05 02:45
亮子 阅读(262)
评论(0) 编辑 收藏 引用