您的位置:首页 > 其它

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函数当中添加相关信息(具体内容参见其他网络资料)即可达到预期效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐