求助Shell编程

vcHeadache 2011-04-28 05:52:59
请问,我通过IShellFolder的方法EnumObjects和Next方法返回的PIDL可以用在SHGetFileInfo吗?
我总是失败,用在IShellFolder的方法就可以,请问有这一说吗?
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdzfjfhnui 2011-04-29
  • 打赏
  • 举报
回复
enum出的这个PIDL是相对路径,需要和父级的PIDL相连接,需要测试下,个人想法
yanganglove 2011-04-29
  • 打赏
  • 举报
回复
晕,加上个颜色把注释加没了,就是想说的是:正如1楼所说,需要和父级的PIDL相连接
yanganglove 2011-04-29
  • 打赏
  • 举报
回复
VS2008 SP1以上才能使用:afxShellManager->ConcatenateItem,你可自己实现

while (pEnum->Next(1, &pidlTemp, &dwFetched) == S_OK && dwFetched)
{
LVITEM lvItem;
ZeroMemory(&lvItem, sizeof(lvItem));


lvItem.mask = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;


pParentFolder->AddRef();


pItem = (LPAFX_SHELLITEMINFO)GlobalAlloc(GPTR, sizeof(AFX_SHELLITEMINFO));

pItem->pidlRel = pidlTemp;
pItem->pidlFQ = afxShellManager->ConcatenateItem(pidlParent, pidlTemp);////如上楼所说,需要和父级的PIDL相连接

pItem->pParentFolder = pParentFolder;
lvItem.lParam = (LPARAM)pItem;

lvItem.pszText = _T("");
lvItem.iImage = OnGetItemIcon(GetItemCount(), pItem);


DWORD dwAttr = SFGAO_DISPLAYATTRMASK;
pParentFolder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &dwAttr);

if (dwAttr&SFGAO_LINK)
{
dwFetched=0;
continue;
}

if (dwAttr & SFGAO_SHARE)
{
lvItem.mask |= LVIF_STATE;
lvItem.stateMask |= LVIS_OVERLAYMASK;
lvItem.state |= INDEXTOOVERLAYMASK(1);
}

if (dwAttr & SFGAO_GHOSTED)
{
lvItem.mask |= LVIF_STATE;
lvItem.stateMask |= LVIS_CUT;
lvItem.state |= LVIS_CUT;
}

int iItem = InsertItem(&lvItem);

if (iItem >= 0)
{
const int nColumns = m_wndHeader.GetItemCount();
for (int iColumn = 0; iColumn < nColumns; iColumn++)
{
SetItemText(iItem, iColumn, OnGetItemText(iItem, iColumn, pItem));

}
m_nFileCount++;
}

CString str;
GetItemPath(str,iItem);
if (str.IsEmpty())
{
DeleteItem(iItem);
m_nFileCount--;
}

dwFetched = 0;
}
pEnum->Release();
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧