在窗口控件上进行OpenGL绘图的方法

来源:互联网 发布:淘宝店铺怎么提升销量 编辑:程序博客网 时间:2024/05/21 14:59

step1:    在你的窗口上绘制控件,比如一个 static , 具体的在这里就不说了, 有一点要提, 控件的Visible属性 必须被钩掉, 就是说设置为不可见;

step2:    从CWnd派生一个新类, 我们用这个类动态的创建窗口,在上面进行绘图, 上面static 控件的作用是为一会儿用这个类 Create子窗口提供位置和size参数;

step3:    新类重载CWnd的 Create和 OnCreate函数,如下:

 

void COpenGLControl::Create(CRect rect, CWnd *parent)
{
   
//Register window class
   CString className = AfxRegisterWndClass(
      CS_HREDRAW 
| CS_VREDRAW | CS_OWNDC,
      NULL,
      (HBRUSH)GetStockObject(BLACK_BRUSH),
      NULL);
  
   
//Finally create the window
   CreateEx(
      
0,
      className,
      
"OpenGL",
      WS_CHILD 
| WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
      rect,
      parent,
      
0);
}
 

注意在重载的 OnCreate函数中这里用了一个openGLDevice类的create方法,其实这个类只是包装了OpenGL初始化和配置的一些工作,我们可以在这个create的位置上进行一些SetupGL()之类的配置操作(参见我的另一篇日志,里面的初始化配置都可以放在这个位置)

int COpenGLControl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
   
if (CWnd::OnCreate(lpCreateStruct) == -1)
      
return -1;
   
   dc 
= new CClientDC(this); //Get device context of window
   openGLDevice.create(dc->m_hDC); //Create opengl rendering context
   InitGL();
 
   
//DONE
   return 0;
}


step4:    在新类中继续添加OnSize,DrawGLScene之类我们需要的函数(方法和平时搞GL的一样), 然后在新类的OnPaint中调用DrawGLScene绘图.

step5:    下来的工作就是在对话框中定义一个新类型的成员变量,然后在对话框的OnInitDialog中按照前面Static的位置和大小Create一个新类型的窗口,就可以在上面绘图了.

作者原文及源码下载参见:

http://steinsoft.net/index.php?site=Programming/Tutorials/opengl_dialog&printable=1

 

 

原创粉丝点击