WebBrowser隐藏后自动销毁的BUG以及解决办法
2012-08-10 14:47
295 查看
程序主界面上有个浏览器控件,里面是google地图,需要点击一个按钮后隐藏浏览器控件,显示其他界面,而且要做到还可以切换到原来的地图上。
一开始只是在浏览器上覆盖了一个图片控件,没有隐藏浏览器,后来发现这样不行,鼠标移动到原来浏览器控件的位置上时,
会变成“小抓手”(google地图上移动地图的抓手)。
后来切换到其他界面时用ShowWindow将浏览器隐藏,但是出问题了,切换回来时浏览器就消失不见了。
查了下资料,原来MFC中的WebBrowser控件有BUG:
m_webBrowser.ShowWindow(SW_HIDE);之后控件就被自动销毁了,再也显示不出来了。
原因:
在MFC中,WebBrowser控件动态创建,没有设置WS_VISIBLE 属性 或者 调用了ShowWindow(SW_HIDE);
就会调用IOleControl::DoVerb() ,使WebBrowser控件的实例被销毁。
解决办法:
(1)
用SDK版的ShowWindow函数。
//隐藏IE控件
::ShowWindow( [b]m_webBrowser.GetSafeHwnd(), SW_HIDE );
//显示IE控件
::ShowWindow( m_webBrowser.GetSafeHwnd(), SW_SHOW );[/b]
(2)
用MoveWindow()将浏览器控件移动到窗口边角地方,并且将窗口的长宽都置为0,需要时在MoveWindow移回来。
一开始只是在浏览器上覆盖了一个图片控件,没有隐藏浏览器,后来发现这样不行,鼠标移动到原来浏览器控件的位置上时,
会变成“小抓手”(google地图上移动地图的抓手)。
后来切换到其他界面时用ShowWindow将浏览器隐藏,但是出问题了,切换回来时浏览器就消失不见了。
查了下资料,原来MFC中的WebBrowser控件有BUG:
m_webBrowser.ShowWindow(SW_HIDE);之后控件就被自动销毁了,再也显示不出来了。
原因:
在MFC中,WebBrowser控件动态创建,没有设置WS_VISIBLE 属性 或者 调用了ShowWindow(SW_HIDE);
就会调用IOleControl::DoVerb() ,使WebBrowser控件的实例被销毁。
解决办法:
(1)
用SDK版的ShowWindow函数。
//隐藏IE控件
::ShowWindow( [b]m_webBrowser.GetSafeHwnd(), SW_HIDE );
//显示IE控件
::ShowWindow( m_webBrowser.GetSafeHwnd(), SW_SHOW );[/b]
(2)
用MoveWindow()将浏览器控件移动到窗口边角地方,并且将窗口的长宽都置为0,需要时在MoveWindow移回来。
相关文章推荐
- WebBrowser隐藏后自动销毁的BUG以及解决办法
- label自动换行代码和DataGrid中删除最后一页的记录时出错的解决办法以及HTML小TIPS:强制HTML表格断行
- 存储卷在系统开机时无法自动挂载的原因分析以及解决办法
- 【转载】IE浏览器常见的9个css Bug以及解决办法
- E浏览器常见的9个css Bug以及解决办法
- phpunit自动安装出现问题以及解决办法
- 最新版jQuery v3.3.1的BUG以及解决办法(什么问题不重要,怎么解决问题才重要)
- [导入][转]IIS应用程序池假死、自动重启以及iis权限等解决办法
- TextView自动换行以及内容过长全部显示--终极解决办法
- IIS应用程序池假死、自动重启以及iis权限等解决办法
- vs2010自动添加行号以及屏幕闪过解决办法
- WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
- crs自动清除日志的时候没有释放文件,bug17034444 的解决办法
- PL/SQL的自动选择bug,以及解决方法
- IIS应用程序池假死、自动重启以及iis权限等解决办法
- <转>IE6浏览器网页文字溢出的解决办法(重复字符bug)---隐藏float对其他float造成影响
- 开发过程中遇到的bug以及解决办法 面试回答个人遇到
- IIS应用程序池假死、自动重启以及iis权限等解决办法
- 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
- RecyclerView和ListView的复用BUG以及解决办法