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 一点通 实现

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