熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VC控件 TreeCtrl 與 ListCtrl 演示

2013-11-13 09:56:37  來源: .NET編程 
    這個例子類似於 Windows 的資源管理器程序運行界面如圖一所示
主要用到的類有
CListCtrlCTreeCtrlCImageListCFileFind 和函數SHGetFileInfo()

簡述步驟如下
增加 TreeCtrl 的 TVS_HASBUTTONSTVS_HASLINESTVS_LINESATROOT Style代碼如下

  DWORD dwStyle = GetWindowLong(m_treem_hWndGWL_STYLE);
  dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
  SetWindowLong(m_treem_hWndGWL_STYLEdwStyle);
為TreeCtrl添加Root項
   m_hRoot = m_treeInsertItem(我的電腦);
   InsertItem()的函數原形為
   HTREEITEM InsertItem( LPCTSTR lpszItem HTREEITEM hParent = TVI_ROOT
   HTREEITEM hInsertAfter = TVI_LAST );
  
獲取本地邏輯驅動器並添加  void CTreeViewDlg::GetLogicalDrives(HTREEITEM hParent)
  {
     size_t szAllDriveStrings = GetLogicalDriveStrings(NULL);
char *pDriveStrings = new char[szAllDriveStrings + sizeof(_T())];
GetLogicalDriveStrings(szAllDriveStringspDriveStrings);
size_t szDriveString = strlen(pDriveStrings);
while(szDriveString > )
{
m_treeInsertItem(pDriveStringshParent);
pDriveStrings += szDriveString + ;
szDriveString = strlen(pDriveStrings);
}
  }
   
添加TVN_EXPANDED消息處理函數當一項展開時為其子項添加下一級目錄  void CTreeViewDlg::OnItemexpandedTree(NMHDR* pNMHDR LRESULT* pResult)
  {
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
TVITEM item = pNMTreeView>itemNew;
if(itemhItem == m_hRoot)
return;
    HTREEITEM hChild = m_treeGetChildItem(itemhItem);
while(hChild)
{
AddSubDir(hChild);
hChild = m_treeGetNextItem(hChildTVGN_NEXT);
}
*pResult = ;
  } 
AddSubDir函數功能添加子項具體代碼見示例

添加TVN_SELCHANGED消息處理函數在這個函數裡用GetFullPath()取得選中項的絕 路徑(GetFullPath()具體代碼看示例)在ListCtrl中添加文件而非文件夾的圖標   void CTreeViewDlg::OnSelchangedTree(NMHDR* pNMHDR LRESULT* pResult)
  {
m_listDeleteAllItems();
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM item = pNMTreeView>itemNew;
if(itemhItem == m_hRoot)
return;
CString str = GetFullPath(itemhItem);
    if(strRight() != \\)
  str += \\;
str += **;
CFileFind file;
BOOL bContinue = fileFindFile(str);
while(bContinue)
{
bContinue = fileFindNextFile();
if(!fileIsDirectory() && !fileIsDots())
{
   SHFILEINFO info;
CString temp = str;
int index = tempFind(**);
tempDelete(index);
   SHGetFileInfo(temp + fileGetFileName()
  
   &infosizeof(&info)
   SHGFI_DISPLAYNAME | SHGFI_ICON);
   int i = m_ImageListAdd(infohIcon);
   m_listInsertItem(iinfoszDisplayNamei);
}
}
*pResult = ;
  }  
  這只是一個簡單的例子你可以在 ListCtrl 中添加鼠標雙擊消息的處理函數用 Process 打開該選中的文件; 該示例在VCxp下編譯通過
  VC初學者如有不足之處請來信指教(way)
From:http://tw.wingwit.com/Article/program/net/201311/12063.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.