jiangsheng

http://www.csdn.net/develop/author/netauthor/jiangsheng/
随笔 - 142, 评论 - 629, 引用 - 27

导航

关于

 
这下要维护3个BLOG了,faint 其他的地址:

所有的文章版权归原文作者所有,任何人需要转载文章,必须征得原文作者授权。
我的MVP配置

标签

每月存档

最新留言

广告

 

Hook DHTML Commands

浏览器在执行很多命令之前都会允许容器来替换默认的处理。在执行一些默认的命令之前,系统会查询用户对IDocHostUIHandler的实现对象的IOleCommandTarget接口,调用默认(NULL)或者CGID_DocHostCommandHandler命令组的命令。如果容器的对应命令处理返回S_OK。那么默认的处理就不会被调用。

下面列出一些可以在容器中自定义的操作:(这些常量的定义位于docobj.h中)

  • OLECMDID_PRINT,默认命令组
  • OLECMDID_SHOWSCRIPTERROR, CGID_DocHostCommandHandler命令组
  • OLECMDID_FOCUSVIEWCONTROLSQUERY, CGID_DocHostCommandHandler命令组
  • OLECMDID_SHOWPAGEACTIONMENU, CGID_DocHostCommandHandler命令组

MFC提供了一些比较容易扩展的类和宏,这样可以很容易地在扩展容器来实现新的接口。这里使用CCmdTarget类提供的GetInterfaceHook虚函数来进行扩展。

浏览器控件访问容器的方式是查询容器的IDocHostUIHandler接口,而对于浏览器辅助对象(Browser Helper Object/ BHO),不能修改容器来增加一个新的接口。这时候可以通过HTML文档的ICustomDoc接口来设置自己的IDocHostUIHandler接口。

在捕获容器的命令的过程中发现一些其他命令也被发送到容器(按时间顺序):

行为 命令组 命令
加载 NULL OLECMDID_SETDOWNLOADSTATE
000214D0-0000-0000-C000-000000000046 OLECMDID_PASTESPECIAL/ OLECMDID_HIDETOOLBARS / OLECMDID_PREREFRESH/ OLECMDID_ONUNLOAD
NULL OLECMDID_SETPROGRESSMAX/ OLECMDID_SETPROGRESSPOS/ OLECMDID_SETDOWNLOADSTATE
打印 CGID_DocHostCommandHandler OLECMDID_PRINT
刷新 CGID_DocHostCommandHandler 0x1799
NULL OLECMDID_PREREFRESH/ OLECMDID_SETPROGRESSMAX/ OLECMDID_SETPROGRESSPOS/ OLECMDID_SETDOWNLOADSTATE
000214D0-0000-0000-C000-000000000046

 

OLECMDID_ONUNLOAD/ OLECMDID_PREREFRESH

不是所有常用操作都会转发到容器。OLECMDID_PRINTPREVIEW、OLECMDID_SAVEAS、OLECMDID_REFRESH看起来就没有被转发。

参考文档:

Visual Studio 2005 June CTP的资源编辑器似乎有点问题,改过资源就保存不到原文件了,只能保存到另一个文件,关闭Visual Stuio之后替换(关闭solution都不行)。

打印 | 张贴于 2005-07-09 16:32:00 | Tag:用户界面  语言(Language)  平台SDK(Platform SDK)  类库(Library)  HTML编程(IE Programming)  集成开发环境(IDE)  脚本(Scripting)

留言反馈

#回复: Hook DHTML Commands 编辑
在浏览器控件中,在打印是,如何初始化打印的参数(如页面是横还是竖)
2007-11-01 01:24:00 | [匿名:fonty]
#回复: Hook DHTML Commands 编辑
我的程序现在碰到一个问题,就是用showcontextmenu替换了右键菜单,但如果引入了google toolbar ,我的菜单就不出来了。有什么好办法解决吗?
我原想把icustomdoc的setuihandler方法给踢掉,不知道这个方法可以吗?
2007-04-27 21:46:00 | [匿名:rex]
#自定义浏览器控件 编辑
同自动化浏览器相比,自动化浏览器控件(WebBrowser Control) 在应用程序中更加常用。从Outlook的预览窗格到Maxthon这样的基于IE引擎的浏览器,从无界面的HTML分析器到Norton Antivirusd的主界面,浏览器控件在众多领域被用作各种各样的用途。这也使得有必要根据具体的用户需求自定义浏览器控件的行为。
2007-01-22 10:27:00 | [匿名:sumuch]
#自定义浏览器控件 编辑
同自动化浏览器( http://blog.joycode.com/jiangsheng/archive/2005/10/20/65489.aspx )相比,自动化浏览器控件(WebBrowser Control)
2007-01-02 13:03:00 | [匿名:Joycode@Ab110.com]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0