MFC列表控件(ListControl)

1. CListCtrl 样式及设置LVS_ICON: 每个item显示大图标LVS_SMALLICON: 每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料如windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”LONG lStyle;lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示方式位lStyle |= LVS_REPORT; //设置styleSetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //设置style2. 扩展样式设置DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //获取当前扩展样式dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(report风格时)dwStyle |= LVS_EX_GRIDLINES; //网格线(report风格时)dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格3. 数据插入m_ListCtrl.InsertColumn(0,"名称",LVCFMT_LEFT,50); //插入列m_ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,50);//直接插入:int nRow=m_ListCtrl.InsertItem(0, "VC++"); //插入行m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0"); //设置数据//LVITEM 结构插入:LVITEM item={0};item.iItem=0; //行号item.mask=LVIF_TEXT; /*LVIF_IMAGE支持图标*/;item.cchTextMax=15;//插入字符串长度item.pszText="Visual C++ 6.0";int nRow=m_ListCtrl.InsertItem(&item);m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");4. 一直选中Item

选中style中的 Show selection always,

或者添加扩展样式 LVS_SHOWSELALWAYS5. 选中和取消选中Itemint nIndex = 0;//选中 m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED| LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);//取消选中 m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);6. 得到CListCtrl中所有行的checkbox的状态CString str;for(int i=0; i<m_ListCtrl.GetItemCount(); i++){ if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)== LVIS_SELECTED || m_ListCtrl.GetCheck(i)) { str.Format(_T("第%d行的checkbox为选中状态"), i); AfxMessageBox(str); } }7. 得到CListCtrl中所有选中行的序号//方法一: CString str; for(int i=0; i<m_ListCtrl.GetItemCount(); i++) { if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ) { str.Format(_T("选中了第%d行"), i); AfxMessageBox(str); } }//方法二: POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition(); if(pos==NULL) TRACE0("No items were selected!/n"); else { while(pos) { int nItem=m_ListCtrl.GetNextSelectedItem(pos); TRACE1("Item %d was selected!/n", nItem); //添加其他操作 } }8. 得到item的信息TCHAR szBuf[1024];LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;lvi.cchTextMax = 1024;m_ListCtrl.GetItem(&lvi);9. 得到CListCtrl的所有列的header字符串内容LVCOLUMN lvcol;char str[256];int nColNum;CString strColumnName[3];//假如有3列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;lvcol.cchTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)){ strColumnName[nColNum] = lvcol.pszText; nColNum++; }10. 使CListCtrl中一项可见,即滚动滚动条m_ListCtrl.EnsureVisible(i, FALSE);11. 得到CListCtrl列数int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();12. 删除所有列方法一: while(m_ListCtrl.DeleteColumn(0)) //因为你删除了第一列后,后面的列会依次向上移动。方法二: int nColumns = 3; //列数 for(int i=nColumns-1; i>=0; i–) m_ListCtrl.DeleteColumn(i);13. 得到单击的CListCtrl的行列号添加listctrl控件的NM_CLICK消息相应函数void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){ //方法一: DWORD dwPos=GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos)); m_ListCtrl.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; int nItem=m_ListCtrl.SubItemHitTest(&lvinfo); if(nItem!=-1) { CString strtemp; strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem); AfxMessageBox(strtemp); } // 方法二: NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem!=-1) { CString strtemp; strtemp.Format("单击的是第%d行第%d列", pNMListView->iItem, pNMListView->iSubItem); AfxMessageBox(strtemp); } *pResult = 0;}14. 判断是否点击在CListCtrl的checkbox上添加listctrl控件的NM_CLICK消息相应函数void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){ DWORD dwPos=GetMessagePos(); CPoint point(LOWORD(dwPos), HIWORD(dwPos)); m_ListCtrl.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; UINT nFlag; int nItem=m_ListCtrl.HitTest(point, &nFlag); //判断是否点在checkbox上 if(nFlag==LVHT_ONITEMSTATEICON) { AfxMessageBox("点在listctrl的checkbox上"); } *pResult = 0;}15. 右键点击CListCtrl的item弹出菜单添加CListCtrl控件的NM_RCLICK消息相应函数void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult){ NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem!=-1) { DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); CMenu menu; VERIFY( menu.LoadMenu( IDR_MENU1 ) ); CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); } *pResult = 0;}16. CListCtrl进行大数据量更新时,避免闪烁m_ListCtrl.SetRedraw(FALSE);//更新内容m_ListCtrl.SetRedraw(TRUE);m_ListCtrl.Invalidate();m_ListCtrl.UpdateWindow();

//或者参考地址

17.举例夺冠那一刻,豪情万丈!登顶那一瞬,万众瞩目!那一刻的嫣然一笑,

MFC列表控件(ListControl)

相关文章:

你感兴趣的文章:

标签云: