分类: C/C++
2008-04-15 21:06:02
来源:CSDN 作者:行舟 |
2. 实现IShellExtInit接口的Initialize方法,在类定义中增加如下内容: STDMETHOD (Initialize) (LPCITEMIDLIST pidlFolder,LPDATAOBJECT lpdobj,HKEY hkeyProgID); Initialize方法的代码如下,从lpdobj对象中取出资源管理器中选择的文件名,程序假定只选择了一个文件。 HRESULT __stdcall TAddContextMenuImpl:: 3. 实现IContextMenu接口的各个方法,内容如上文所示,声明如下: public: (HMENU hmenu,UINT indexMenu,UINT idCmdFirst,UINT idCmdLast,UINT uFlags); (LPCMINVOKECOMMANDINFO pici); (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。 |