• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            這個(gè)例子類(lèi)似于 Windows 的資源管理器,程序運(yùn)行界面如圖一所示:

            圖一

            主要用到的類(lèi)有:

            CListCtrl,CTreeCtrl,CImageList,CFileFind 和函數(shù)SHGetFileInfo()

            簡(jiǎn)述步驟如下:

            1、增加 TreeCtrl 的 TVS_HASBUTTONS,TVS_HASLINES、TVS_LINESATROOT Style,代碼如下:

            1.DWORD dwStyle = GetWindowLong(m_tree.m_hWnd,GWL_STYLE);
            2.dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
            3.SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle);

            2、為T(mén)reeCtrl添加Root項(xiàng):

            1.m_hRoot = m_tree.InsertItem("我的電腦");
            2.InsertItem()的函數(shù)原形為
            3.HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT,
            4.HTREEITEM hInsertAfter = TVI_LAST );

            3、獲取本地邏輯驅(qū)動(dòng)器,并添加:

            01.void CTreeViewDlg::GetLogicalDrives(HTREEITEM hParent)
            02.{
            03.size_t szAllDriveStrings = GetLogicalDriveStrings(0,NULL);
            04.char *pDriveStrings = new char[szAllDriveStrings + sizeof(_T(""))];
            05.GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);
            06.size_t szDriveString = strlen(pDriveStrings);
            07.while(szDriveString > 0)
            08.{
            09.m_tree.InsertItem(pDriveStrings,hParent);
            10.pDriveStrings += szDriveString + 1;
            11.szDriveString = strlen(pDriveStrings);
            12.}
            13.}

            4、添加TVN_EXPANDED消息處理函數(shù),當(dāng)一項(xiàng)展開(kāi)時(shí),為其子項(xiàng)添加下一級(jí)目錄:

            01.void CTreeViewDlg::OnItemexpandedTree(NMHDR* pNMHDR, LRESULT* pResult)
            02.{
            03.NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
            04.// TODO: Add your control notification handler code here
            05.TVITEM item = pNMTreeView->itemNew;
            06.if(item.hItem == m_hRoot)
            07.return;
            08.HTREEITEM hChild = m_tree.GetChildItem(item.hItem);
            09.while(hChild)
            10.{
            11.AddSubDir(hChild);
            12.hChild = m_tree.GetNextItem(hChild,TVGN_NEXT);
            13.}
            14.*pResult = 0;
            15.}

            AddSubDir函數(shù)功能添加子項(xiàng),具體代碼見(jiàn)示例。

            5、添加TVN_SELCHANGED消息處理函數(shù),在這個(gè)函數(shù)里,用GetFullPath()取得選中項(xiàng)的絕 路徑(GetFullPath()具體代碼看示例),在ListCtrl中添加文件而非文件夾的圖標(biāo):

            01.void CTreeViewDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
            02.{
            03.m_list.DeleteAllItems();
            04.NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
            05.TVITEM item = pNMTreeView->itemNew;
            06.if(item.hItem == m_hRoot)
            07.return;
            08.CString str = GetFullPath(item.hItem);
            09.if(str.Right(1) != "\\")
            10.str += "\\";
            11.str += "*.*";
            12.CFileFind file;
            13.BOOL bContinue = file.FindFile(str);
            14.while(bContinue)
            15.{
            16.bContinue = file.FindNextFile();
            17.if(!file.IsDirectory() && !file.IsDots())
            18.{
            19.SHFILEINFO info;
            20.CString temp = str;
            21.int index = temp.Find("*.*");
            22.temp.Delete(index,3);
            23.SHGetFileInfo(temp + file.GetFileName(),
            24.0,
            25.&info,sizeof(&info),
            26.SHGFI_DISPLAYNAME | SHGFI_ICON);
            27.int i = m_ImageList.Add(info.hIcon);
            28.m_list.InsertItem(i,info.szDisplayName,i);
            29.}
            30.}
            31.*pResult = 0;
            32.}

            這只是一個(gè)簡(jiǎn)單的例子,你可以在 ListCtrl 中添加鼠標(biāo)雙擊消息的處理函數(shù),用 Process 打開(kāi)該選中的文件; 該示例在VC6,xp下編譯通過(guò)。

            VC初學(xué)者,如有不足之處,請(qǐng)來(lái)信指教(waysen01@st.lzu.edu.cn)。


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            狠狠久久综合伊人不卡| 免费观看久久精彩视频| 精品欧美一区二区三区久久久 | 波多野结衣AV无码久久一区| 中文字幕亚洲综合久久菠萝蜜| 2021国内久久精品| 曰曰摸天天摸人人看久久久| 伊人久久大香线蕉精品不卡 | 久久久久久亚洲Av无码精品专口 | 欧美日韩精品久久久免费观看| 久久综合亚洲色HEZYO社区| 热re99久久6国产精品免费| 亚洲一区精品伊人久久伊人| 久久婷婷五月综合97色一本一本 | 色综合久久88色综合天天| 久久国产精品视频| 亚洲人成伊人成综合网久久久| 国产精品岛国久久久久| 亚洲色大成网站WWW久久九九| 国产Av激情久久无码天堂| 久久乐国产综合亚洲精品| 久久久久国产精品麻豆AR影院| 色狠狠久久AV五月综合| 日韩十八禁一区二区久久| 久久久久久无码Av成人影院| 久久亚洲精品国产亚洲老地址| 亚洲国产精品久久久久婷婷老年| 亚洲va久久久噜噜噜久久| 亚洲日本va中文字幕久久| 久久人人超碰精品CAOPOREN| 精品欧美一区二区三区久久久| 久久久久亚洲精品天堂| 亚洲精品美女久久久久99小说| 66精品综合久久久久久久| www.久久热| 精品无码久久久久久尤物| 亚洲午夜久久久影院| 日韩欧美亚洲综合久久 | 久久精品成人免费国产片小草| 99久久久久| 久久精品国产福利国产琪琪|