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

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

发布时间:2006.02.09 05:57     来源:CSDN    作者:行舟

2. 实现IShellExtInit接口的Initialize方法,在类定义中增加如下内容:

STDMETHOD (Initialize)

(LPCITEMIDLIST pidlFolder,LPDATAOBJECT lpdobj,HKEY hkeyProgID);

Initialize方法的代码如下,从lpdobj对象中取出资源管理器中选择的文件名,程序假定只选择了一个文件。

HRESULT __stdcall TAddContextMenuImpl::

Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT lpdobj, HKEY hkeyProgID)

{

FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };

STGMEDIUM stg = { TYMED_HGLOBAL };

HDROP hDrop;

if (FAILED(lpdobj->GetData(&fmt, &stg))) return E_FAIL;

hDrop = (HDROP)GlobalLock(stg.hGlobal);

if ( hDrop == NULL)

{

ReleaseStgMedium(&stg);

return E_OUTOFMEMORY;

}

DragQueryFile(hDrop, 0, g_szFilePath, MAX_PATH);

GlobalUnlock(stg.hGlobal);

ReleaseStgMedium(&stg);

return S_OK;

}

3. 实现IContextMenu接口的各个方法,内容如上文所示,声明如下:

public:

STDMETHOD (QueryContextMenu)

(HMENU hmenu,UINT indexMenu,UINT idCmdFirst,UINT idCmdLast,UINT uFlags);

STDMETHOD (InvokeCommand)

(LPCMINVOKECOMMANDINFO pici);

STDMETHOD (GetCommandString)

(UINT idCmd,UINT uFlags,UINT *pwReserved,LPSTR pszName,UINT cchMax);

最后,把工程编译为DLL文件,运行菜单[Run->Register ActiveX Server],把DLL注册。与Delphi和VC相比,C++ Builder似乎有些缺陷。首先,它实现时太过复杂,生成的文件一大堆。最麻烦的是,它无法实现自动注册为shell扩展,它没有VC的rgs文件,像Delphi那样改写UpdateRegistry函数,怎么也不行,好像这个函数没有调用一样。无奈,只好自己动手向注册表添加必须的项目(如图)。但是,C++ Builder给出了3个CLSID,很迷惑人,正确的CLSID应该是类AddContextMenu的,C++ Builder给它命名为CLSID_AddContextMenu。

注册后,在资源管理器右击任何文件,如readme.txt,都将打开一个选择文件的对话框,然后shell用选择的文件打开readme.txt。
(e129)

<<上一页 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学习·网管