您的位置:资讯频道 > 技术文档 > 控件开发基础

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

来源:博客 作者:Cacar 时间:2008-03-21 点击:337 次
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一个新类型的窗口,就可以在上面绘图了.

资讯搜索

 

推荐产品

VARCHART XGantt
全球知名的甘特图控件,能够实现如 Microsoft Project 般强大的项目管理功能。
TurboDemo 中文版
TurboDemo - 抓取屏幕截图并通过动态演示示例及手册解释软件、个人电脑应用程序、网站与产品。
BCGControlBar Library .NET Edition
该组件包含大量可自定义程度高、可设计性好的组件,使用户可创建精致美观的图形用户界面。