MFC对话框当中使用View视图
2012-04-11 16:53
232 查看
最近在写一个基于OpenGL的程序,程序当中的一个模块需要在对话框上面显示三维图形。因为程序的主框架程序用的是OpenGL来进行三维显示,所以很直接的想到能不能够在对话框上面使用OpenGL显示。
我首先是按照OpenGL在MFC单文档程序当中的配置方式对对话框进行了类似的配置,最后得到的结果很不理想,无法实现功能。
正所谓“他山之石,可以攻玉”,遇到问题首先去查查资料,看看别人已经做过的工作是很有必要的。首先参考的是百度文库当中共享的一篇文章——《对话框当中使用View类》(http://wenku.baidu.com/view/b36540573c1ec5da50e27075.html)。程序编译、运行出结果之后貌似没有问题,用鼠标一点击显示出来的窗口之后问题就来了:窗口相应鼠标点击的消息有误,并且MFC的框架程序当中的显示效果也别破坏了。说明当中的显示效果如下图:
而我时候这篇文章后得到的结果则很惨:
经过对错误的分析我认为问题出在程序的消息队列里面(有谁知道真相的麻烦告诉我,不甚感激),百度百科文档的例子是一个基于对对话框的程序,直接在对话框上面进行显示是没有问题的。我做的程序里面用的的MFC的单文档程序,程序当中原本就有了一个View类,现在有在程序当中人为的加入了一个View类,在消息相应的过程当中就会因为纤细响应存在问题而使程序出错。
经过不断地尝试,终于发现了解决问题之道——使用多线程。就是将要显示的对话框放到一个新建的线程当中去,程序在消息响应的过程中就不会因为消息相应的混乱而发生错误,最后得到的结果如下图:
问题终于解决了。现将实现的大致过程列出来:
1 建立一个对话框,在对话框上面放置一个Picture Control类型的控件(控件的大小范围即是需要用于OpenGL显示的范围);
2 新建一个派生于CView类的类,在这个类当中配置好OpenGL的相关设置(用于三维显示的窗口);
3 新建一个派生于CWndThread类的类,在类中添加一个之前建立的对话框类型的变量(进行操作的对话框界面);
4 在主程序的View类的响应函数当中使用函数AfxBeginThread建立一个新的线程,使用PostThreadMessage函数向新建的线程发送消息,传递相关的初始化信息;
5 在对话框的OnInitDialog函数当中添加相关信息(具体内容参见其他网络资料)即可达到预期效果。
我首先是按照OpenGL在MFC单文档程序当中的配置方式对对话框进行了类似的配置,最后得到的结果很不理想,无法实现功能。
正所谓“他山之石,可以攻玉”,遇到问题首先去查查资料,看看别人已经做过的工作是很有必要的。首先参考的是百度文库当中共享的一篇文章——《对话框当中使用View类》(http://wenku.baidu.com/view/b36540573c1ec5da50e27075.html)。程序编译、运行出结果之后貌似没有问题,用鼠标一点击显示出来的窗口之后问题就来了:窗口相应鼠标点击的消息有误,并且MFC的框架程序当中的显示效果也别破坏了。说明当中的显示效果如下图:
而我时候这篇文章后得到的结果则很惨:
经过对错误的分析我认为问题出在程序的消息队列里面(有谁知道真相的麻烦告诉我,不甚感激),百度百科文档的例子是一个基于对对话框的程序,直接在对话框上面进行显示是没有问题的。我做的程序里面用的的MFC的单文档程序,程序当中原本就有了一个View类,现在有在程序当中人为的加入了一个View类,在消息相应的过程当中就会因为纤细响应存在问题而使程序出错。
经过不断地尝试,终于发现了解决问题之道——使用多线程。就是将要显示的对话框放到一个新建的线程当中去,程序在消息响应的过程中就不会因为消息相应的混乱而发生错误,最后得到的结果如下图:
问题终于解决了。现将实现的大致过程列出来:
1 建立一个对话框,在对话框上面放置一个Picture Control类型的控件(控件的大小范围即是需要用于OpenGL显示的范围);
2 新建一个派生于CView类的类,在这个类当中配置好OpenGL的相关设置(用于三维显示的窗口);
3 新建一个派生于CWndThread类的类,在类中添加一个之前建立的对话框类型的变量(进行操作的对话框界面);
4 在主程序的View类的响应函数当中使用函数AfxBeginThread建立一个新的线程,使用PostThreadMessage函数向新建的线程发送消息,传递相关的初始化信息;
5 在对话框的OnInitDialog函数当中添加相关信息(具体内容参见其他网络资料)即可达到预期效果。
相关文章推荐
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- MFC学习笔记--将对话框收获的输入在View中使用
- MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- Android创建自定义视图列表对话框(数据库中的数据作为数据源,使用RecyclerView作为列表)
- 【旧资料整理】MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- 关于MFC中添加对话框类后类视图(class view)无显示
- MFC 文档view视图中根据鼠标指定的某个区域控制延迟显示tip的方法(原创)
- IOS使用视图控制器和视图(三)通过 使用 UIPickerView 来选择数据
- android TextView EditTextView一些技巧使用 (视图代码布局)
- 对话框视图UIAlertView,上拉菜单UIActionSheet,以及9.0之后完全取代他们的的UIAlertController
- 【Android】webView 使用 系统自带搜索对话框问题
- MFC对话框使用技巧
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- 如何在对话框程序中使用view类
- EF5+MVC4系列(12) 在主视图中直接用RenderAction调用子Action,并返回视图(Return View)或者分部视图(Return PartialView); 从主Action传值到子Action使用TempData传值;TempData高级用法
- html5使用视图块(view blocks)
- Android ViewFlipper翻转视图使用详解
- IOS 表视图(UITableVIew)的使用方法(2)名单的分段显示
- Android基于OpenGL在GLSurfaceView上绘制三角形及使用投影和相机视图方法示例