VC一点通:实现文件夹的缩略图显示
2008-11-14 19:36:31 来源:WEB开发网缓存目录的数据
在更改目录时,需要重建目录内容的缓存。这包括目录的pidl和IShellFolder接口指针,目录内容的相对pidl,以及列表项的显示信息(基于性能上的考虑,列表项的显示信息是在接收到LVN_ODCACHEHINT通知的时候缓存的)。
LPITEMIDLISTm_pidlFolder;
IShellFolder*m_psfFolder;
CTypedPtrArray
m_arpFolderItems;
CTypedPtrMap
m_mapCache;
voidCPicViewView::EnterFolder(LPCITEMIDLISTpidl)
{
USES_CONVERSION;
m_pidlFolder=ILClone(pidl);
if(m_pidlFolder){
LPENUMIDLISTppenum=NULL;
LPITEMIDLISTpidlItems=NULL;
ULONGceltFetched;
HRESULThr;
hr=m_psfDesktop->BindToObject(m_pidlFolder,NULL,IID_IShellFolder,(LPVOID*)&m_psfFolder);
if(SUCCEEDED(hr)){
hr=m_psfFolder->EnumObjects(NULL,SHCONTF_FOLDERS|SHCONTF_NONFOLDERS,&ppenum);
if(SUCCEEDED(hr)){
while(hr=ppenum->Next(1,&pidlItems,&celtFetched)==S_OK&&(celtFetched)==1){
m_arpFolderItems.Add(pidlItems);
}
}
}
GetListCtrl().SetItemCount(m_arpFolderItems.GetSize());
}
}
打开文件夹
本应用程序显示文件夹的内容而不是显示文档的内容,所以我重载了打开文件时的处理,显示目录选择对话框而不是文件打开对话框。
voidCPicViewApp::OnFileOpen()
{
TCHARtszDisplayName[_MAX_PATH];
TCHARtszPathSelected[_MAX_PATH];
LPITEMIDLISTpidlSelected=PidlBrowse(m_pMainWnd->GetSafeHwnd(),0,tszDisplayName);
if(pidlSelected){
if(SHGetPathFromIDList(pidlSelected,tszPathSelected)){
CDocument*pDocument=OpenDocumentFile(tszPathSelected);
pDocument->SetTitle(tszDisplayName);
ILFree(pidlSelected);
}
}
}
更多精彩
赞助商链接