看了这篇博文
http://www.cnblogs.com/phinecos/archive/2007/07/28/834916.html
发现拖动窗口时候有白条(抖动).
再看
http://www.cnblogs.com/phinecos/archive/2008/11/04/1326687.html
其中说到:
8 ,试试改变窗口的大小,你会看到很严重的闪烁,并且关闭程序后会报告内存泄露,因此我们这就来解决这两个问题吧。
发生闪烁的原因是 Windows 先绘制背景,然后再是 OpenGL 绘制,因为我们已经让 OpenGL 负责清空背景色,因此我们不需要 Windows 去清空背景了
BOOL CCY457OpenGLView::OnEraseBkgnd(CDC
*
pDC)
{
// Tell Windows not to erase the background
return TRUE;
}
{
// Tell Windows not to erase the background
return TRUE;
}
于是添加WM_ERASEBKGND消息处理,然后注意的地方是
1.像素格式
PIXELFORMATDESCRIPTOR pixelDesc =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER |PFD_STEREO_DONTCARE , //不能同时使用 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
};
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER |PFD_STEREO_DONTCARE , //不能同时使用 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
};
2.双缓冲的使用
在OnPaint函数中画完场景后添加
this->DrawGLScene();
SwapBuffers(this->hDC);
SwapBuffers(this->hDC);