分类: C/C++
2008-04-15 21:05:35
来源:CSDN 作者:行舟 |
注册上下文菜单Handler 上下文菜单与文件类或者文件夹相关联。对于文件类,handler注册在文件类的HKEY_CLASSES_ROOT\ProgID\Shellex\ContextMenuHandlers子键下。在ContextMenuHandlers下创建一个以handler子键,把子键的缺省值设置为handler的CLSID的字符串值,就可以完成注册。 也能够把handler关联到文件夹,注册的方法与上面类似,不过是在HKEY_CLASSES_ROOT\FolderType\Shellex\ContextMenuHandlers增加子键, 其中的FolderType 是文件夹类型的名称。 如果一个文件类有上下文菜单与它关联,那么双击一个对象将自动启动缺省的命令,而不会调用handler的QueryContextMenu方法。当对象被双击时,为了指定调用handler的QueryContextMenu方法,必须在handler的CLSID键下创建一个ShellEx\MayChangeDefaultMenu的子键。这样,当与handler关联的对象被双击时,QueryContextMenu 被调用,而且uFlags参数会包含CMF_DEFAULTONLY 标志。 注意,如果设置了MayChangeDefaultMenu键,当一个关联的项目被双击时,会强制系统载入handler的DLL。如果handler不改变缺省动作,就不应该设置MayChangeDefaultMenu,否则会引起系统不必要地载入这个DLL。仅仅当在可能改变上下文菜单的缺省动作时,才应该在设置上下文菜单handler的这个值。 创建工程 作为Borland的产品,用C++ Builder创建shell扩展的过程与Delphi有类似之处,但它毕竟是C++语言,所以也有与VC类似之的地方。 1. 选择File菜单的New菜单项,翻到New Items对话框的ActiveX页,双击ActiveX Library项,创建一个新的COM工程,把工程命名为MyContextMenu。从New Items 对话框的ActiveX页选择COM Object项,将打开COM Server向导。把"COClass"改为AddContextMenu,选择Apartment线程模式。其它不要改写。C++ Builder自动产生一个接口和一个类。默认的类名是TAddContextMenuImpl,采用自动生成的IAddContextMenu接口。我们必须自己添加新的接口IShellExtInit和IContextMenu,如下所示,粗体是添加的内容: #include |