MFC程序员的WTL指南(7)包容ActiveX控件
2006-07-22 22:03:17 来源:WEB开发网核心提示: 当然这并不是完美的解决方案,CComObjectStack用于短命的临时对象,MFC程序员的WTL指南(7)包容ActiveX控件(9),不幸的是只要调用它的任何一个IUnknown方法都会引发断言错误,因为CMainDlg对象在开始监听事件时会调用AddRef,向前,停止和刷新,所以CC
当然这并不是完美的解决方案,CComObjectStack用于短命的临时对象,不幸的是只要调用它的任何一个IUnknown方法都会引发断言错误。因为CMainDlg对象在开始监听事件时会调用AddRef,所以CComObjectStack不适用于这种情况。
解决这个问题要么坚持使用CComObject,要么从CComObjectStack派生一个CComObjectStack2类,允许对IUnknow方法调用。CComObject的那个不必要的引用计数并无大碍--人们不会注意到它的发生--但是如果你必须节省那个CPU时钟周期的话,你可以使用本章的例子工程代码中的CComObjectStack2类。
回顾例子工程现在我们已经看到事件响应如何工作了,再来看看完整的IEHoster工程,它包容了一个浏览器控件并响应了6个事件,它还显示了一个事件列表,你会对浏览器如何使用它们提供带进度条的界面有个感性的认识,程序处理了以下几个事件:
- BeforeNavigate2和NavigateComplete2:这些事件让程序可以控制URL的导航,如果你响应了BeforeNavigate2事件,你可以在事件的处理函数中取消导航。
- DownloadBegin和DownloadComplete:程序使用这些事件控制“wait”消息,这表示浏览器正在工作。一个更优美的程序会像IE一样在此期间使用一段动画。
- CommandStateChange:这个事件告诉程序向前和向后导航命令何时可用,应用程序将相应的按钮变为可用或不可用。
- StatusTextChange:这个事件会在几种情况下触发,例如鼠标移到一个超链接上。这个事件发送一个字符串,应用程序响应这个事件,将这个字符串显示在浏览器窗口下的静态控件上。
程序有四个按钮控制浏览器工作:向后,向前,停止和刷新,它们分别调用IWebBrowser2相应的方法。
更多精彩
赞助商链接