您的位置:首页 > 运维架构

MFC之OpenGL入门程序

2004-06-23 02:57 483 查看
我在网上浏览过很多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编程所必须做好的基本工作^_*
明天加入画直线和画茶壶的部分,完成好这个例子.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: