赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

用C++ Builder创建上下文菜单扩展处 (4)

发布时间:2006.02.09 05:57     来源: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 // 声明IShellExtInit和IContextMenu的头文件

class ATL_NO_VTABLE TAddContextMenuImpl :

public CComObjectRootEx,

public CComCoClass,

public IShellExtInit,

public IContextMenu,


public IAddContextMenu

{

private:

char g_szFilePath[MAX_PATH];

public:

… …

BEGIN_COM_MAP(TAddContextMenuImpl)

COM_INTERFACE_ENTRY(IAddContextMenu)

COM_INTERFACE_ENTRY(IContextMenu) // 导出IContextMenu接口

COM_INTERFACE_ENTRY(IShellExtInit) // 导出IShellExtInit接口

END_COM_MAP()

… …

};

<<上一页 1 2 3 4 5 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· C++编程人员容易犯的10个C#错误 (02-08) · C++中用函数模板实现和优化抽象操作 (02-07)
· C++类型转换时定义非成员函数 (02-07) · C++继承性应用实例 日期和时间 (02-07)
· C++中的静态联编和动态联编介绍 (01-19) · C++编程批评系列 继承的本质 (01-17)
· 提供一个基于C++的加密/解密算法 (01-10) · C#中实现DataGrid双向排序 (01-10)
· C++之父Bjarne谈C++在2005年 (01-10) · 周末巨献:有可能挑战Java优势的四种技术 (12-09)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管