More Related Content
Similar to 참고 코드(Shelllilst filtering)
Similar to 참고 코드(Shelllilst filtering) (20)
참고 코드(Shelllilst filtering)
- 1. HRESULT CMyShellListCtrl::EnumObjects(LPSHELLFOLDER pParentFolder, LPITEMIDLIST
pidlParent)
{
ASSERT_VALID(this);
ASSERT_VALID(afxShellManager);
LPENUMIDLIST pEnum;
HRESULT hRes = pParentFolder->EnumObjects(NULL, m_nTypes, &pEnum);
if (SUCCEEDED(hRes))
{
LPITEMIDLIST pidlTemp;
DWORD dwFetched = 1;
LPAFX_SHELLITEMINFO pItem;
//enumerate the item's PIDLs
while (pEnum->Next(1, &pidlTemp, &dwFetched) == S_OK && dwFetched)
{
LVITEM lvItem;
ZeroMemory(&lvItem, sizeof(lvItem));
//fill in the TV_ITEM structure for this item
lvItem.mask = LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
//AddRef the parent folder so it's pointer stays valid
pParentFolder->AddRef();
//put the private information in the lParam
pItem = (LPAFX_SHELLITEMINFO)GlobalAlloc(GPTR,
sizeof(AFX_SHELLITEMINFO));
pItem->pidlRel = pidlTemp;
pItem->pidlFQ = afxShellManager->ConcatenateItem(pidlParent,
pidlTemp);
pItem->pParentFolder = pParentFolder;
lvItem.lParam = (LPARAM)pItem;
lvItem.pszText = _T("");
int n = GetItemCount();
lvItem.iImage = OnGetItemIcon(n, pItem);
//determine if the item is shared
DWORD dwAttr = SFGAO_FOLDER | SFGAO_DISPLAYATTRMASK;// SFGAO_FOLDER
pParentFolder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp,
&dwAttr);
if (dwAttr & SFGAO_SHARE)
{
lvItem.mask |= LVIF_STATE;
lvItem.stateMask |= LVIS_OVERLAYMASK;
lvItem.state |= INDEXTOOVERLAYMASK(1); //1 is the index for the
shared overlay image
}
if (dwAttr & SFGAO_GHOSTED)
{
lvItem.mask |= LVIF_STATE;
lvItem.stateMask |= LVIS_CUT;
lvItem.state |= LVIS_CUT;
}
- 2. if (dwAttr & SFGAO_FOLDER)
{
//zipÀº À©µµ¿ì¿¡¼± Æú´õ·Î °£ÁֵDZ⠶§¹®¿¡ ¿©±â¼ ó¸®ÇØ¾ß ÇÔ.
}
else
{
SHFILEINFO sfi;
TCHAR szPath [MAX_PATH];
if (SHGetPathFromIDList(pItem->pidlFQ, szPath))
{
CFileStatus fs;
if (CFile::GetStatus(szPath, fs))
{
CString s = szPath;
int n = s.ReverseFind('.');
if(n!=-1)
{
s = s.Mid(n+1);
s.MakeLower();
if(s != _T("jpg"))
continue; }
}
}
}
int iItem = InsertItem(&lvItem);
if (iItem >= 0)
{
// Set columns:
const int nColumns = m_wndHeader.GetItemCount();
for (int iColumn = 0; iColumn < nColumns; iColumn++)
{
CString s = OnGetItemText(iItem, iColumn, pItem);
SetItemText(iItem, iColumn,s );
}
}
dwFetched = 0;
}
pEnum->Release();
}
return hRes;
}