知识库(1)-如何在Win2K中使用SHMultiFileProperties

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在Win2k中SHMultiFileProperties函数不能用正确的剪贴板格式查询IdataObject

症状

当应用程序调用SHMultiFileProperties函数为一个或多个文件显示Shell属性对话框时无法使用CFSTR_SHELLIDLIST中的剪贴板格式来查询一列文件提供的IdataObject。

原因

在Win2K中,Shell32.dll维持一组已注册的剪贴板格式。当一个自定义的IdataObject实现被传递给SHMultiFileProperties,Shell32.dll的剪贴板格式数组可能没有被初始化。结果是SHMultiFileProperties使用0作为剪贴板格式Id来调用IDataObject::GetData。

解决方法

在调用SHMultiFileProperties之前,调用的应用程序必须确保Shell32.dll已经初始化它的剪贴板格式数组。下面的函数通过创建一个IdataObject来强制Shell32.dll去初始化它的剪贴板格式数组。

STDAPI_(void) ForceShellToRegisterClipboardFormats(void)

{

LPITEMIDLIST pidlDrives;

IShellFolder* psfDesktop;

IDataObject* pdata;

HRESULT hr;

hr = SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidlDrives);

if (SUCCEEDED(hr))

{

hr = SHGetDesktopFolder(&psfDesktop);

if (SUCCEEDED(hr))

{

hr = psfDesktop->GetUIObjectOf(NULL,

1,

(LPCITEMIDLIST*)&pidlDrives,

IID_IDataObject,

NULL,

(void**)&pdata);

if (SUCCEEDED(hr))

{

pdata->Release();

}

psfDesktop->Release();

}

ILFree(pidlDrives);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航