至于vc内嵌浏览器的方式有很多种,vs2008就可以使用htmldialog了,使用htmlview也行,但是个人觉得还是插入activex控件,然后再绑定变量来的舒服。我就是用插入activex控件再绑定变量的方式的,记得使用vc6就会生产类CWebBrowser2,但是这个类使用起来并不是那么的舒服,所以我对它再进行了一次继承。
注意到,CWebBrowser2继承自CWnd,所以我们继承自CWebBrowser2得类CxExplorer就必须支持mfc里面的动态创建机制,总之这个也很简单,加几句宏就行了,原理其实也不需要弄得太清楚,把mfc的原理弄得太清楚实在太费时间了。。。
我创建的这个浏览器类,除了提供基类的接口外,还提供了几个方便自动填表之类操作的接口。比如,获取text的值,写text的值,点击按钮或者复选框,执行js函数等的功能,由于我基本也就只用过这些功能,所以也就弄了几个这样的接口,也没过多区关注其原理等。
其实,我也没学过太多的com知识,只看过一本com技术内幕的书,更别说com的模板ATL了。所以啊,很多知识也不是很了解。用内嵌浏览器也玩过几次,以前没怎么发掘它的强大应用了。。。
其实,内嵌浏览器很多很好的应用,比如说可以作为客户端,由于内嵌了浏览器,所以不需要实现太多的客户端逻辑,而且服务端直接写web页面就行了,不过速度要求不能太高。还有自动填写表之类的应用,还有写网页游戏的自动玩的功能应该都能发掘出来吧。。。
关于如何判断网页是否加载完成的方法,网上一直说用OnDocumentComplete事件,其实还可能出现网页离线的状态,但是我试了几个方法都检测不出来。所以,最好还是用OnTimer检测和设置你想要的东西。
下面提供这几个类的下载,我用的使用方式是DDX,不使用vs生成的类还可以保持代码的一致性。explorer