WEB开发网
开发学院软件开发VC VC一点通:实现文件夹的缩略图显示 阅读

VC一点通:实现文件夹的缩略图显示

 2008-11-14 19:36:31 来源:WEB开发网   
核心提示: 缓存目录的数据在更改目录时,需要重建目录内容的缓存,VC一点通:实现文件夹的缩略图显示(5),这包括目录的pidl和IShellFolder接口指针,目录内容的相对pidl,LPITEMIDLISTm_pidlFolder;IShellFolder*m_psfFolder;

缓存目录的数据

在更改目录时,需要重建目录内容的缓存。这包括目录的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);
}
}
}

上一页  1 2 3 4 5 6  下一页

Tags:VC 一点通 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接