STGMEDIUM   medium;
FORMATETC   fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
UINT        uCount;      
TCHAR szPath[MAX_PATH];
if(SUCCEEDED(lpdobj->GetData(&fe, &medium)))
{         

uCount = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, NULL, 0);uCount = DragQueryFile((HDROP)medium.hGlobal, 0xFFFFFFFF, NULL, 0);
// store a list of filenames
for (UINT i=0;i<uCount;i++)
{  

                         DragQueryFile((HDROP)medium.hGlobal, i, szPath, sizeof(szPath));
                         m_listPaths.push_back(szPath);
                

}
     
ReleaseStgMedium(&medium);      
}

解决方案 »

  1.   

    应该是lpdobj->GetData(&fe, &medium) 获取的是快捷方式指向的文件,以下是我的DragQueryFile获取的路径,可以得到.lnk路径:
    void CListCtrlEx::OnDropFiles(HDROP hDropInfo) 
    {
    CListCtrl::OnDropFiles(hDropInfo);
    TCHAR szFilePath[_MAX_PATH] = {0};
    int nFileCount = DragQueryFile(hDropInfo, 0xFFFFFFFF , NULL, NULL); for(int iFile=0; iFile<nFileCount; iFile++)
    {
    DragQueryFile(hDropInfo, iFile, szFilePath, _MAX_PATH);..................
      

  2.   

    其实我的程序是一个contentmenu,取这种.lnk的好像不能这么取.算了,我自己再研究一下.