在窗口控件上进行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);
}
...{
//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;
}
...{
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
- 在窗口控件上进行OpenGL绘图的方法
- 在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
- 在窗口上绘图
- VC中在对话框上的static控件中绘图
- Qt 在可视窗口部件上绘图
- Qt 在可视窗口部件上绘图
- 在BlackBerry上使用 OpenGL绘图(一): OpenGL介绍
- 采用JNI方法利用opengl es 1.x在android上绘图
- 解决在控件上绘图,以及绘图后的CPU的高负荷的问题
- 在winform窗口上,实现按回车键(Enter)光标移至下一个控件的方法
- android 在Bitmap上进行绘图操作
- 在static控件上绘图(一)
- VC 在CStatic控件上绘图
- C# GDI在控件上绘图
- 在对话框picture control中利用opengl进行绘图
- 在对话框picture control中利用opengl进行绘图
- 在BlackBerry上使用OpenGL绘图(五):动画的产生
- 在BlackBerry上使用OpenGL绘图(七):视图变换:观察点的运动
- 关于项目管理的知识点
- CString,string,char*的综合比较(转)
- Java获得系统环境变量
- 遭遇RootKit.Win32.GameHack,Trojan.PSW.Win32.QQPass,Trojan-PSW.Win32.OnLineGames等2
- ASM的一个例子(动态字节码生成) (Java高级编程(J2SE综合)) - [Matrix - 与 Java 共舞]
- 在窗口控件上进行OpenGL绘图的方法
- Linux手机风光无限
- 感受中华文学的经典
- 今日开博
- 打开卡巴斯基7.0主动防御后无法上网
- 观看中国软件市场,免费的WPS说明了什么?
- Nokia在Linux手机圈中的博弈:和Google直接过招。
- 软件产品越精简越好
- 并查集 (Union-Find Sets)及其应用