在shell编程的上下文菜单中,如何判断所选的是一个文件,还是多个文件
编号:QA004348
建立日期: 2001年8月7日 最后修改日期:2001年8月7日
所属类别:
葛曙锋:
操作系统: Windows 9x
编程工具: VC
问题: 在shell编程的上下文菜单中,如何判断鼠标所选的是一个文件,还是多个文件?
水平: 中级
回答:
你应该在扩展的Initialize中进行这种检查。在Initialize中你可以获得用户选择的文件数和每个文件的名称。例如:
HRESULT CSimpleShlExt::Initialize (
LPCITEMIDLIST pidlFolder,
LPDATAOBJECT pDataObj,
HKEY hProgID )
{
FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stg = { TYMED_HGLOBAL };
HDROP hDrop;
// Look for CF_HDROP data in the data object.
if ( FAILED( pDataObj->GetData ( &fmt, &stg )))
{
// Nope! Return an "invalid argument" error back to Explorer.
return E_INVALIDARG;
}
// Get a pointer to the actual data.
hDrop = (HDROP) GlobalLock ( stg.hGlobal );
// Make sure it worked.
if ( NULL == hDrop )
{
return E_INVALIDARG;
}
// Sanity check – make sure there is at least one filename.
UINT uNumFiles = DragQueryFile ( hDrop, 0xFFFFFFFF, NULL, 0 ); // 这里是获得文件个数的地方
if ( 0 == uNumFiles )
{
GlobalUnlock ( stg.hGlobal );
ReleaseStgMedium ( &stg );
return E_INVALIDARG;
}
HRESULT hr = S_OK;
// Get the name of the first file and store it in our member variable m_szFile.
if ( 0 == DragQueryFile ( hDrop, 0, m_szFile, MAX_PATH ))
{
hr = E_INVALIDARG;
}
GlobalUnlock ( stg.hGlobal );
ReleaseStgMedium ( &stg );
return hr;
}
详细的内容可以参考http://www.devx.com/free/mgznarch/vcdj/1998/feb98/shell1.asp。
此问题由李海回答。
| |
|
|
| |
|
|