日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC列表控件ListControl和树控件TreeControl

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC列表控件ListControl和树控件TreeControl 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

列表控件

?列表相關的類:CListCtrl-父類是CWnd,本質是一個控件;?CListView-父類是CView,本質是一個視圖。相當于在視圖中嵌入了一個CListCtrl控件

?列表控件的使用

  • ???1.1?顯示方式:LVS_ICON/LVS_SMALLICON/LVS_LIST/LVS_REPORT
  • ???1.2?圖標:CListCtrl::SetImageList;CListCtrl::GetImageList
  • ???1.3?設置列:CListCtrl::InsertColumn
  • ???1.4?數據的添加:CListCtrl::InsertItem-插入數據項;CListCtrl::SetItemText-設置數據項的文本?????????????
  • ???1.5?遍歷數據項:CListCtrl::GetFirstSelectedItemPosition;?CListCtrl::GetNextSelectedItem;?CListCtrl::GetSelectedCount
  • ???1.6?數據項的刪除:CListCtrl::DeleteItem-刪除指定索引的數據項;CListCtrl::DeleteAllItems-刪除所有項;CListCtrl::DeleteColumn-刪除指定列
  • ???1.7?查找:CListCtrl::FindItem
  • ???1.8?附加數據:CListCtrl::SetItemData;CListCtrl::GetItemData???

實例:新建MFC基于對話框的工程MFCList;關鍵代碼

[cpp]
view plaincopyprint?
  • void?CMFCListDlg::DoDataExchange(CDataExchange*?pDX)??
  • {??
  • ????CDialogEx::DoDataExchange(pDX);??
  • ????DDX_Control(pDX,?IDC_COMBO1,?m_wndStyle);//添加下拉列表框的關聯控件變量??
  • ????DDX_Control(pDX,?IDC_LIST1,?m_wndList);//添加列表控件的關聯控件變量??
  • }??
  • ??
  • BEGIN_MESSAGE_MAP(CMFCListDlg,?CDialogEx)??
  • ????ON_WM_SYSCOMMAND()??
  • ????ON_WM_PAINT()??
  • ????ON_WM_QUERYDRAGICON()??
  • ????ON_BN_CLICKED(IDC_BUTTON_Seclect,?&CMFCListDlg::OnBnClickedButtonSeclect)//"獲取選擇項"控件的雙擊事件??
  • ????ON_BN_CLICKED(IDC_BUTTON_Delete,?&CMFCListDlg::OnBnClickedButtonDelete)//"刪除選擇項"控件?的雙擊事件??
  • ????ON_CBN_SELCHANGE(IDC_COMBO1,?&CMFCListDlg::OnCbnSelchangeCombo1)//下拉列表框的選擇項改變事件??
  • ????ON_NOTIFY(NM_DBLCLK,?IDC_LIST1,?&CMFCListDlg::OnNMDblclkList1)//列表控件的雙擊項事件??
  • END_MESSAGE_MAP()??
  • //BOOL?CMFCListDlg::OnInitDialog()調用下列代碼??
  • //初始化列表控件??
  • InitListCtrl();??
  • m_wndStyle.InsertString(0,L"圖標(ICON)");??
  • m_wndStyle.InsertString(1,L"小圖標(SMALL?ICON)");??
  • m_wndStyle.InsertString(2,L"列表(LIST)");??
  • m_wndStyle.InsertString(3,L"報表(REPORT)");??
  • m_wndStyle.SetCurSel(0);??
  • ??
  • //"獲取選擇項"控件的雙擊事件??
  • void?CMFCListDlg::OnBnClickedButtonSeclect()??
  • {???
  • ????POSITION?pos=m_wndList.GetFirstSelectedItemPosition();??
  • ????while(pos)??
  • ????{??
  • ????????int?nItem=m_wndList.GetNextSelectedItem(pos);??
  • ????????MessageBox(m_wndList.GetItemText(nItem,0));//顯示數據項的文本??
  • ????}??
  • }??
  • //"刪除選擇項"控件?的雙擊事件??
  • void?CMFCListDlg::OnBnClickedButtonDelete()??
  • {??
  • ????LVFINDINFO?info;??
  • ????info.flags=LVFI_STRING|LVFI_PARTIAL;??
  • ????info.psz=L"stu.data";??
  • ????int?index=0;??
  • ????if?((index=m_wndList.FindItem(&info))!=-1)??
  • ????{??
  • ????????m_wndList.DeleteItem(index);??
  • ????}??
  • }??
  • ??
  • //下拉列表框的選擇項改變事件??
  • void?CMFCListDlg::OnCbnSelchangeCombo1()??
  • {???
  • ????int?nSel=m_wndStyle.GetCurSel();??
  • ????switch?(nSel)??
  • ????{??
  • ????case?0://圖標??
  • ????????m_wndList.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_REPORT,LVS_ICON);??
  • ????????break;??
  • ????case?1://小圖標??
  • ????????m_wndList.ModifyStyle(LVS_ICON|LVS_LIST|LVS_REPORT,LVS_SMALLICON);??
  • ????????break;??
  • ????case?2://列表??
  • ????????m_wndList.ModifyStyle(LVS_SMALLICON|LVS_ICON|LVS_REPORT,LVS_LIST);??
  • ????????break;??
  • ????case?3://報表??
  • ????????m_wndList.ModifyStyle(LVS_ICON|LVS_LIST|LVS_SMALLICON,LVS_REPORT);??
  • ????????break;??
  • ????}??
  • }???
  • //列表控件的雙擊項事件??
  • void?CMFCListDlg::OnNMDblclkList1(NMHDR?*pNMHDR,?LRESULT?*pResult)??
  • {??
  • ????LPNMITEMACTIVATE?pNMItemActivate?=?reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);??
  • ????//?TODO:?在此添加控件通知處理程序代碼??
  • ????int?nSel=pNMItemActivate->iItem;??
  • ????if?(-1!=nSel)??
  • ????{??
  • ????????CString*?pPath=(CString*)m_wndList.GetItemData(nSel);??
  • ????????//MessageBox(*pPath);??
  • ????????ShowFile(*pPath+L"\\*.*");??
  • ????}??
  • ????*pResult?=?0;??
  • }??
  • ??
  • void?CMFCListDlg::InitListCtrl()??
  • {??
  • ????//1?設置控件的圖標列表??
  • ????CImageList*?pILNormal=new?CImageList;??
  • ????pILNormal->Create(IDB_NORMAL,32,1,RGB(0,0,0));??
  • ????m_wndList.SetImageList(pILNormal,LVSIL_NORMAL);??
  • ????//2?設置控件的小圖標??
  • ????CImageList*?pILSmall=new?CImageList;??
  • ????pILSmall->Create(IDB_SMALL,18,1,RGB(0,0,0));??
  • ????m_wndList.SetImageList(pILSmall,LVSIL_SMALL);??
  • ????//3?設置列??
  • ????m_wndList.InsertColumn(0,L"名稱",LVCFMT_LEFT,150);??
  • ????m_wndList.InsertColumn(1,L"大小",LVCFMT_LEFT,80);??
  • ????m_wndList.InsertColumn(2,L"類型",LVCFMT_LEFT,80);??
  • ????m_wndList.InsertColumn(3,L"修改日期",LVCFMT_LEFT,100);??
  • ????//4?插入測試數據??
  • ????m_wndList.InsertItem(0,L"文件",1);??
  • ????m_wndList.SetItemText(0,1,L"15");??
  • ????m_wndList.SetItemText(0,2,L"文件");??
  • ????m_wndList.SetItemText(0,3,L"2012-03-06");??
  • ??
  • ????m_wndList.InsertItem(1,L"文件夾",0);??
  • ????m_wndList.SetItemText(1,1,L"12");??
  • ????m_wndList.SetItemText(1,2,L"文件夾");??
  • ????m_wndList.SetItemText(1,3,L"2011-03-06");??
  • ????//5?顯示C盤根目錄下的所有文件和文件夾??
  • ????//ShowFile(L"c:\\");??
  • ????//6?設置控件的背景色??
  • ????m_wndList.SetBkColor(RGB(200,200,200));??
  • ????m_wndList.SetTextColor(RGB(255,0,0));??
  • ????m_wndList.SetTextBkColor(CLR_NONE);??
  • ????//7?設置控件的背景圖片??
  • ????m_wndList.SetBkImage(L"res\\MFCList.ico");??
  • }??
  • ??
  • void?CMFCListDlg::ShowFile(CString?strPath)??
  • {??
  • ????//添加數據前,先清空原有數據??
  • ????m_wndList.DeleteAllItems();??
  • ????int?index=0;//添加數據項的索引??
  • ????CFileFind?find;??
  • ????BOOL?bRet=find.FindFile(strPath+"*.*");??
  • ????while?(bRet)??
  • ????{??
  • ????????bRet=find.FindNextFileW();??
  • ????????if?(find.IsDirectory())??
  • ????????{??
  • ????????????m_wndList.InsertItem(index,find.GetFileName(),0);??
  • ????????????m_wndList.SetItemText(index,2,L"文件夾");??
  • ????????}??
  • ????????else??
  • ????????{??
  • ????????????m_wndList.InsertItem(index,find.GetFileName(),1);??
  • ????????????DWORD?nLen=find.GetLength();??
  • ????????????CString?strLen;??
  • ????????????strLen.Format(L"%d",nLen);??
  • ????????????m_wndList.SetItemText(index,1,strLen);??
  • ????????}??
  • ????????//保存路徑??
  • ????????CString*?pPath=new?CString;??
  • ????????*pPath=find.GetFilePath();??
  • ????????m_wndList.SetItemData(index,(DWORD)pPath);??
  • ????????index++;??
  • ????}??
  • ????find.Close();//結束查找??
  • }??
  • void CMFCListDlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_COMBO1, m_wndStyle);//添加下拉列表框的關聯控件變量DDX_Control(pDX, IDC_LIST1, m_wndList);//添加列表控件的關聯控件變量 }BEGIN_MESSAGE_MAP(CMFCListDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_Seclect, &CMFCListDlg::OnBnClickedButtonSeclect)//"獲取選擇項"控件的雙擊事件ON_BN_CLICKED(IDC_BUTTON_Delete, &CMFCListDlg::OnBnClickedButtonDelete)//"刪除選擇項"控件 的雙擊事件ON_CBN_SELCHANGE(IDC_COMBO1, &CMFCListDlg::OnCbnSelchangeCombo1)//下拉列表框的選擇項改變事件ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CMFCListDlg::OnNMDblclkList1)//列表控件的雙擊項事件 END_MESSAGE_MAP() //BOOL CMFCListDlg::OnInitDialog()調用下列代碼 //初始化列表控件 InitListCtrl(); m_wndStyle.InsertString(0,L"圖標(ICON)"); m_wndStyle.InsertString(1,L"小圖標(SMALL ICON)"); m_wndStyle.InsertString(2,L"列表(LIST)"); m_wndStyle.InsertString(3,L"報表(REPORT)"); m_wndStyle.SetCurSel(0);//"獲取選擇項"控件的雙擊事件 void CMFCListDlg::OnBnClickedButtonSeclect() { POSITION pos=m_wndList.GetFirstSelectedItemPosition();while(pos){int nItem=m_wndList.GetNextSelectedItem(pos);MessageBox(m_wndList.GetItemText(nItem,0));//顯示數據項的文本} } //"刪除選擇項"控件 的雙擊事件 void CMFCListDlg::OnBnClickedButtonDelete() {LVFINDINFO info;info.flags=LVFI_STRING|LVFI_PARTIAL;info.psz=L"stu.data";int index=0;if ((index=m_wndList.FindItem(&info))!=-1){m_wndList.DeleteItem(index);} }//下拉列表框的選擇項改變事件 void CMFCListDlg::OnCbnSelchangeCombo1() { int nSel=m_wndStyle.GetCurSel();switch (nSel){case 0://圖標m_wndList.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_REPORT,LVS_ICON);break;case 1://小圖標m_wndList.ModifyStyle(LVS_ICON|LVS_LIST|LVS_REPORT,LVS_SMALLICON);break;case 2://列表m_wndList.ModifyStyle(LVS_SMALLICON|LVS_ICON|LVS_REPORT,LVS_LIST);break;case 3://報表m_wndList.ModifyStyle(LVS_ICON|LVS_LIST|LVS_SMALLICON,LVS_REPORT);break;} } //列表控件的雙擊項事件 void CMFCListDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼int nSel=pNMItemActivate->iItem;if (-1!=nSel){CString* pPath=(CString*)m_wndList.GetItemData(nSel);//MessageBox(*pPath);ShowFile(*pPath+L"\\*.*");}*pResult = 0; }void CMFCListDlg::InitListCtrl() {//1 設置控件的圖標列表CImageList* pILNormal=new CImageList;pILNormal->Create(IDB_NORMAL,32,1,RGB(0,0,0));m_wndList.SetImageList(pILNormal,LVSIL_NORMAL);//2 設置控件的小圖標CImageList* pILSmall=new CImageList;pILSmall->Create(IDB_SMALL,18,1,RGB(0,0,0));m_wndList.SetImageList(pILSmall,LVSIL_SMALL);//3 設置列m_wndList.InsertColumn(0,L"名稱",LVCFMT_LEFT,150);m_wndList.InsertColumn(1,L"大小",LVCFMT_LEFT,80);m_wndList.InsertColumn(2,L"類型",LVCFMT_LEFT,80);m_wndList.InsertColumn(3,L"修改日期",LVCFMT_LEFT,100);//4 插入測試數據m_wndList.InsertItem(0,L"文件",1);m_wndList.SetItemText(0,1,L"15");m_wndList.SetItemText(0,2,L"文件");m_wndList.SetItemText(0,3,L"2012-03-06");m_wndList.InsertItem(1,L"文件夾",0);m_wndList.SetItemText(1,1,L"12");m_wndList.SetItemText(1,2,L"文件夾");m_wndList.SetItemText(1,3,L"2011-03-06");//5 顯示C盤根目錄下的所有文件和文件夾//ShowFile(L"c:\\");//6 設置控件的背景色m_wndList.SetBkColor(RGB(200,200,200));m_wndList.SetTextColor(RGB(255,0,0));m_wndList.SetTextBkColor(CLR_NONE);//7 設置控件的背景圖片m_wndList.SetBkImage(L"res\\MFCList.ico"); }void CMFCListDlg::ShowFile(CString strPath) {//添加數據前,先清空原有數據m_wndList.DeleteAllItems();int index=0;//添加數據項的索引CFileFind find;BOOL bRet=find.FindFile(strPath+"*.*");while (bRet){bRet=find.FindNextFileW();if (find.IsDirectory()){m_wndList.InsertItem(index,find.GetFileName(),0);m_wndList.SetItemText(index,2,L"文件夾");}else{m_wndList.InsertItem(index,find.GetFileName(),1);DWORD nLen=find.GetLength();CString strLen;strLen.Format(L"%d",nLen);m_wndList.SetItemText(index,1,strLen);}//保存路徑CString* pPath=new CString;*pPath=find.GetFilePath();m_wndList.SetItemData(index,(DWORD)pPath);index++;}find.Close();//結束查找 }

    運行結果:

    樹控件

    樹控件相關類:CTreeCtrl-父類是CWnd,本質上是一個控件;CTreeView?-父類是CView,本質是一個視圖。CTreeView是在CView中嵌入了一個CTreeCtrl控件

    樹控件的使用

    • ?????2.1?設置圖標:CTreeCtrl::SetImageList;CTreeCtrl::GetImageList
    • ?????2.2?增加節點:CTreeCtrl::InserItem增加節點,并返回節點句柄
    • ?????2.3?獲取節點:CTreeCtrl::GetSelectedItem-獲取選擇的節點;CTreeCtrl::GetParentItem-獲取節點的父節點;CTreeCtrl::GetRootItem-獲取根節點?...
    • ?????2.4?判斷:CTreeCtrl::ItemHasChildren-判斷節點是否有子節點
    • ?????2.5?刪除節點:CTreeCtrl::DeleteItem-刪除指定節點;CTreeCtrl::DeleteAllItems-刪除所有節點
    • ?????2.6?附加數據:CTreeCtrl::SetItemData;CTreeCtrl::GetItemData

    實例:新建MFC基于對話框的工程MFCTree;關鍵代碼

    [cpp]
    view plaincopyprint?
  • void?CMFCTreeDlg::DoDataExchange(CDataExchange*?pDX)??
  • {??
  • ????CDialogEx::DoDataExchange(pDX);??
  • ????DDX_Control(pDX,?IDC_TREE1,?m_wndTree);//增加樹控件的關聯控件變量??
  • }??
  • ??
  • BEGIN_MESSAGE_MAP(CMFCTreeDlg,?CDialogEx)??
  • ????ON_WM_SYSCOMMAND()??
  • ????ON_WM_PAINT()??
  • ????ON_WM_QUERYDRAGICON()????
  • ????ON_NOTIFY(NM_DBLCLK,?IDC_TREE1,?&CMFCTreeDlg::OnNMDblclkTree1)//雙擊樹控件項的事件??
  • END_MESSAGE_MAP()??
  • ??
  • //初始化樹控件??
  • void?CMFCTreeDlg::InitTreeControl()??
  • {??
  • ????//1.設置圖標列表??
  • ????CImageList*?pilNormal=new?CImageList;??
  • ????BOOL?bs=pilNormal->Create(IDB_NORMAL,16,1,RGB(1,0,0));?//IDB_NORMAL是?bitmap資源?64?x?16??
  • ????if?(bs)??
  • ????{??
  • ????????m_wndTree.SetImageList(pilNormal,TVSIL_NORMAL);??
  • ????}??
  • ????else??
  • ????{??
  • ????????AfxMessageBox(L"adsfads");??
  • ????}??
  • ????m_wndTree.SetItemHeight(20);//設置行高??
  • ????HTREEITEM?hRoot=m_wndTree.InsertItem(L"C:\\",0,2);//插入根目錄??
  • ????ShowFile(L"c:\\",hRoot);??
  • }??
  • void?CMFCTreeDlg::ShowFile(CString?strPath,HTREEITEM?hParent)??
  • {??
  • ????if?(m_wndTree.ItemHasChildren(hParent))??
  • ????{??
  • ????????return;??
  • ????}??
  • ????CFileFind?find;??
  • ????BOOL?bRet=find.FindFile(strPath+"\\*.*");??
  • ????while(bRet)??
  • ????{??
  • ????????HTREEITEM?hItem;??
  • ????????bRet=find.FindNextFileW();??
  • ????????CString?strName=find.GetFileName();??
  • ????????if?(!find.IsDots())??
  • ????????{??
  • ????????????if?(find.IsDirectory())??
  • ????????????{??
  • ????????????????hItem=m_wndTree.InsertItem(strName,0,2,hParent);??
  • ????????????}??
  • ????????????else??
  • ????????????{??
  • ????????????????hItem=m_wndTree.InsertItem(strName,1,3,hParent);??
  • ????????????}??
  • ????????????//保存路徑??
  • ????????????CString?*pPath=new?CString;??
  • ????????????*pPath=find.GetFilePath();??
  • ????????????m_wndTree.SetItemData(hItem,(DWORD)pPath);??
  • ????????}??
  • ????}??
  • ????find.Close();//結束查找??
  • ????m_wndTree.Expand(hParent,TVE_EXPAND);//展開根節點??
  • }??????
  • //樹控件項的雙擊事件??
  • void?CMFCTreeDlg::OnNMDblclkTree1(NMHDR?*pNMHDR,?LRESULT?*pResult)??
  • {???
  • ????HTREEITEM?hCurItem=m_wndTree.GetSelectedItem();???
  • ????if?(hCurItem==NULL?||?hCurItem==m_wndTree.GetRootItem())??
  • ????{??
  • ????????return;??
  • ????}??
  • ????CString*?pPath=(CString*)m_wndTree.GetItemData(hCurItem);??
  • ????//AfxMessageBox(*pPath);??
  • ????ShowFile(*pPath,hCurItem);??
  • ????*pResult?=?0;??
  • }??
  • void CMFCTreeDlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_TREE1, m_wndTree);//增加樹控件的關聯控件變量 }BEGIN_MESSAGE_MAP(CMFCTreeDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON() ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &CMFCTreeDlg::OnNMDblclkTree1)//雙擊樹控件項的事件 END_MESSAGE_MAP()//初始化樹控件 void CMFCTreeDlg::InitTreeControl() {//1.設置圖標列表CImageList* pilNormal=new CImageList;BOOL bs=pilNormal->Create(IDB_NORMAL,16,1,RGB(1,0,0)); //IDB_NORMAL是 bitmap資源 64 x 16if (bs){m_wndTree.SetImageList(pilNormal,TVSIL_NORMAL);}else{AfxMessageBox(L"adsfads");}m_wndTree.SetItemHeight(20);//設置行高HTREEITEM hRoot=m_wndTree.InsertItem(L"C:\\",0,2);//插入根目錄ShowFile(L"c:\\",hRoot); } void CMFCTreeDlg::ShowFile(CString strPath,HTREEITEM hParent) {if (m_wndTree.ItemHasChildren(hParent)){return;}CFileFind find;BOOL bRet=find.FindFile(strPath+"\\*.*");while(bRet){HTREEITEM hItem;bRet=find.FindNextFileW();CString strName=find.GetFileName();if (!find.IsDots()){if (find.IsDirectory()){hItem=m_wndTree.InsertItem(strName,0,2,hParent);}else{hItem=m_wndTree.InsertItem(strName,1,3,hParent);}//保存路徑CString *pPath=new CString;*pPath=find.GetFilePath();m_wndTree.SetItemData(hItem,(DWORD)pPath);}}find.Close();//結束查找m_wndTree.Expand(hParent,TVE_EXPAND);//展開根節點 } //樹控件項的雙擊事件 void CMFCTreeDlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult) { HTREEITEM hCurItem=m_wndTree.GetSelectedItem(); if (hCurItem==NULL || hCurItem==m_wndTree.GetRootItem()){return;}CString* pPath=(CString*)m_wndTree.GetItemData(hCurItem);//AfxMessageBox(*pPath);ShowFile(*pPath,hCurItem);*pResult = 0; }

    運行結果:

    總結

    以上是生活随笔為你收集整理的MFC列表控件ListControl和树控件TreeControl的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。