热情软件屋

 

在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

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio