当前位置 : 首页 » 文章分类 :  开发  »  MFC中WebBrowser隐藏后自动销毁的BUG以及解决办法

MFC中WebBrowser隐藏后自动销毁的BUG以及解决办法

MFC程序主界面上有个浏览器控件,里面是google地图,需要点击一个按钮后隐藏浏览器控件,显示其他界面,而且要做到还可以切换到原来的地图上。一开始只是在浏览器上覆盖了一个图片控件,没有隐藏浏览器,后来发现这样不行,鼠标移动到原来浏览器控件的位置上时,会变成“小抓手”(google地图上移动地图的抓手)。后来改为切换到其他界面时用ShowWindow(SW_HIDE)将浏览器隐藏,但是出问题了,切换回来时浏览器就消失不见了。

查了下资料,原来MFC中的WebBrowser控件有BUG:
m_webBrowser.ShowWindow(SW_HIDE); 之后控件就被自动销毁了,再也显示不出来了。
原因:
在MFC中,WebBrowser控件动态创建,没有设置WS_VISIBLE 属性
或者这样描述:
调用了ShowWindow(SW_HIDE); 就会调用IOleControl::DoVerb(),使WebBrowser控件的实例被销毁。

解决办法:
(1)用SDK版的ShowWindow函数。

//隐藏IE控件
::ShowWindow( m_webBrowser.GetSafeHwnd(), SW_HIDE ); 
//显示IE控件
::ShowWindow( m_webBrowser.GetSafeHwnd(), SW_SHOW );

(2)用MoveWindow()将浏览器控件移动到窗口边角地方,并且将窗口的长宽都置为0,需要时在MoveWindow()移回来。

上一篇 图像处理中的直方图应用(通过直方图均衡化增强图像对比度)

下一篇 MFC中给树形目录控件的节点添加图标

阅读
316
阅读预计1分钟
创建日期 2012-08-10
修改日期 2017-07-14
类别
标签
百度推荐