基于MFC的OpenGL图形显示

 

http://pan.baidu.com/s/1jG9mG7s

总结:创建hDC->为hDC创建设置pixelformat->创建hRC->current hDC和hRC
准备:在stdafx.h中添加头文件 #include <gl\glut.h>
在CMainFrame类中定义:
设备上下文 CClientDC * m_pDC;
着色上下文 HGLRC m_hRC;
1、如果将其分为一个步骤就是初始化,在CMainFrame类中的OnCreat()函数中添加初始化函数Init(void);
2、在Init()函数的功能为
a、创建DC m_pDC = new CClientDC(this);
b、调用函数bSetupPixelFormat() //设置像素格式的函数
c、使用DC创建一个RC m_hRC = wglCreatContext(m_pDC->GetsafeHdc());
d、RC与当前DC相关联 wglMakeCurrent(m_pDC->GetsafeHdc(),m_hRC);

3、bSetupPixelFormat() 函数的定义//注意在程序中此函数应该在Init()函数的前面,(此函数要被Init()调用)
a、定义一个像素格式
b、设置像素格式(分两步)
选择像素格式 pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(),&pfd)
设置像素格式 SetPixelFormat(m_pDC->GetSafeHdc(),pixelformat,&pfd)
code:
void CMainFrame::Init(void) //此函数在CMainFrame类中创建并添加为如下代码
{
PIXELFORMATDESCRIPTOR pfd;
m_pDC = new CClientDC(this); //创建DC
ASSERT(m_pDC != NULL);
if (!bSetupPixelFormat()) //设置像素格式
return;
m_hRC = wglCreateContext(m_pDC->GetSafeHdc());//用DC去创建一个RC
wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC); //RC与当前DC相关联

}

BOOL CMainFrame::bSetupPixelFormat(void)//在CMainFrame类中添加此函数并添加为如下代码
{
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL
PFD_DOUBLEBUFFER, // 必须支持双缓冲
PFD_TYPE_RGBA, // 申请RGBA 格式
24, // 选定色彩深度
0, 0, 0, 0, 0, 0, // 忽略的色彩位
0, // 无Alpha缓存
0, // 忽略Shift Bit
0, // 无聚集缓存
0, 0, 0, 0, // 忽略聚集位
32, // 32位Z-缓存(深度缓存)
0, // 无模板缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘图层
0, // 保留
0, 0, 0
};
//设置像素格式
int pixelformat;
if((pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(),&pfd))==0)
{
//MessageBox("选择像素格式出错了!");
return false;
}
//能否设置像素格式
if(SetPixelFormat(m_pDC->GetSafeHdc(),pixelformat,&pfd)==false)
{
//MessageBox("设置像素格式出错");
return false;
}
return true;
}
最后可以设置一些OnDraw()、OnSize()、OnDestroy()函数的设置

void C***View::OnDestroy() //OnDestory()函数为消息响应函数
{
//取消DC和RC的关联,并且删除DC与RC。
CView::OnDestroy();
// TODO: Add your message handler code here
//m_hRC = wglGetCurrentContext();
wglMakeCurrent(NULL,NULL); //取消DC和RC的关联
if(m_hRC)
wglDeleteContext(m_hRC); //删除RC
if(m_pDC)
delete m_pDC; //删除DC
}

posted @ 2014-10-05 12:00  lwn6  阅读(499)  评论(0编辑  收藏  举报
什么是幸福?天天在做自己想做的事情,家人、同事、朋友、客户、网友都和和睦睦,身体健康、钱包鼓鼓、女朋友天天开心、生活无忧无虑就是最大的幸福