VC++ List Control 的具体用法实例。

来源:互联网 发布:ios unity3d 开发 编辑:程序博客网 时间:2024/06/06 07:20
http://zhidao.baidu.com/link?url=pwsiDuXobbQlm83dyHIYAa6sWjqUCuVyqUHVaH1XebWDPs8L8isWeXNMrsOt06idB_ieYijCoxW5xMnPT7j7zK
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{//单击函数,可获得点击的行和列,以及其值
     // TODO: Add your control notification handler code here
     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
     char szStr[80];
     int nRow=pNMListView->iItem;//单击的行
     int nCol=pNMListView->iSubItem;//单击的列
     m_listCtrl.GetItemText(nRow,nCol,szStr,80);//获得单击行列的内容
     *pResult = 0;
}
复制粘贴内容吧:赶快给我1. ListCtrl 风格      LVS_ICON: item显示图标      LVS_SMALLICON: item显示图标      LVS_LIST: 显示列带图标item      LVS_REPORT: 显示item详细资料      直观理解:windows资源管理器查看标签图标图标列表详细资料--------------------------------------------------------------------------------2. 设置listctrl 风格及扩展风格      LONG lStyle;      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取前窗口style      lStyle &= ~LVS_TYPEMASK; //清除显示式位      lStyle |= LVS_REPORT; //设置style      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style       DWORD dwStyle = m_list.GetExtendedStyle();      dwStyle |= LVS_EX_FULLROWSELECT;//选某行使整行高亮(适用与report风格listctrl)      dwStyle |= LVS_EX_GRIDLINES;//网格线(适用与report风格listctrl)      dwStyle |= LVS_EX_CHECKBOXES;//item前checkbox控件      m_list.SetExtendedStyle(dwStyle); //设置扩展风格--------------------------------------------------------------------------------3. 插入数据      m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列      m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );      int nRow = m_list.InsertItem(0, 11);//插入行      m_list.SetItemText(nRow, 1, jacky);//设置数据--------------------------------------------------------------------------------4. 直选item    选styleShow selection always或者面第2点设置LVS_SHOWSELALWAYS--------------------------------------------------------------------------------5. 选取消选行    int nIndex = 0;    //选    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);    //取消选    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED); --------------------------------------------------------------------------------6. listctrlcheckbox状态      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);      CString str;      for(int i=0; i<m_list.GetItemCount(); i )      {           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))           {                str.Format(_T("第%d行checkbox状态"), i);                AfxMessageBox(str);           }      }CString strIns;strIns="delete from tmpStatByGround";m_pRs.CreateInstance(__uuidof(Recordset));m_pRs->CursorLocation = adUseClient;m_pRs->Open((LPCTSTR)strIns, vDispatch, adOpenKeyset,adLockOptimistic, adCmdUnknown);--------------------------------------------------------------------------------7. listctrl序号      :      CString str;      for(int i=0; i<m_list.GetItemCount(); i )      {           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )           {                str.Format(_T("选第%d行"), i);                AfxMessageBox(str);           }      }      二:      POSITION pos = m_list.GetFirstSelectedItemPosition();      if (pos == NULL)           TRACE0("No items were selected!\n");      else      {           while (pos)           {                int nItem = m_list.GetNextSelectedItem(pos);                TRACE1("Item %d was selected!\n", nItem);                // you could do your own processing on nItem here           }      }--------------------------------------------------------------------------------8. item信息      TCHAR szBuf[1024];      LVITEM lvi;      lvi.iItem = nItemIndex;      lvi.iSubItem = 0;      lvi.mask = LVIF_TEXT;      lvi.pszText = szBuf;      lvi.cchTextMax = 1024;      m_list.GetItem(&lvi);--------------------------------------------------------------------------------9. listctrlheader字符串内容      LVCOLUMN lvcol;      char  str[256];      int   nColNum;      CString  strColumnName[4];//假4列      nColNum = 0;      lvcol.mask = LVCF_TEXT;      lvcol.pszText = str;      lvcol.cchTextMax = 256;      while(m_list.GetColumn(nColNum, &lvcol))      {           strColumnName[nColNum] = lvcol.pszText;           nColNum ;      }--------------------------------------------------------------------------------10. 使listctrl即滚条    m_list.EnsureVisible(i, FALSE);--------------------------------------------------------------------------------11. listctrl列数    int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();--------------------------------------------------------------------------------12. 删除所:         while ( m_list.DeleteColumn (0))       删除      二:      int nColumns = 4;      for (int i=nColumns-1; i>=0; i--)          m_list.DeleteColumn (i);--------------------------------------------------------------------------------13. 单击listctrl行列号      添加listctrl控件NM_CLICK消息相应函数      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)      {           // :           /*           DWORD dwPos = GetMessagePos();           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );             m_list.ScreenToClient(&point);             LVHITTESTINFO lvinfo;           lvinfo.pt = point;           lvinfo.flags = LVHT_ABOVE;               int nItem = m_list.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. 判断否点击listctrlcheckbox      添加listctrl控件NM_CLICK消息相应函数      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)      {           DWORD dwPos = GetMessagePos();           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );             m_list.ScreenToClient(&point);             LVHITTESTINFO lvinfo;           lvinfo.pt = point;           lvinfo.flags = LVHT_ABOVE;               UINT nFlag;           int nItem = m_list.HitTest(point, &nFlag);           //判断否点checkbox           if(nFlag == LVHT_ONITEMSTATEICON)           {                AfxMessageBox("点listctrlcheckbox");           }           *pResult = 0;      }--------------------------------------------------------------------------------15. 右键点击listctrlitem弹菜单      添加listctrl控件NM_RCLICK消息相应函数      void CTest6Dlg::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. item切换焦点(包括用键盘鼠标切换item)状态些变化顺序      添加listctrl控件LVN_ITEMCHANGED消息相应函数      void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)      {           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;           // TODO: Add your control notification handler code here              CString sTemp;            if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&            (pNMListView->uNewState & LVIS_FOCUSED) == 0)           {                sTemp.Format("%d losted focus",pNMListView->iItem);           }           else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&               (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)           {                sTemp.Format("%d got focus",pNMListView->iItem);           }            if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&            (pNMListView->uNewState & LVIS_SELECTED) == 0)           {                sTemp.Format("%d losted selected",pNMListView->iItem);           }           else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&            (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)           {                sTemp.Format("%d got selected",pNMListView->iItem);           }              *pResult = 0;      }--------------------------------------------------------------------------------17. listctrl  subitem 添加图标      注意: 首先要用 InsertItem() 插入列, 才能用 SetItem 设置其项       m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);      m_userlist.SetItem(..);--------------------------------------------------------------------------------18. CListCtrl显示文件并根据文件类型显示图标      网代码试用并改, share 步骤1: 设置 list 图像列表 系统图像列表    BOOL SetSystemImageList( CListCtrl & list ){      HIMAGELIST himlSmall; HIMAGELIST himlLarge; SHFILEINFO sfi; char  cSysDir[MAX_PATH]; CString  strBuf; memset(cSysDir, 0, MAX_PATH); GetWindowsDirectory(cSysDir, MAX_PATH); strBuf = cSysDir ;  // SHGetFileInfo: // If uFlags contains SHGFI_SYSICONINDEX, the return value is a handle to // an image list that contains the large icon images. // If SHGFI_SMALLICON is included with SHGFI_SYSICONINDEX, the return value // is the handle to an image list that contains the small icon images. // himlSmall = (HIMAGELIST)SHGetFileInfo ( (LPCSTR)cSysDir,      0,      &sfi,     sizeof(SHFILEINFO),      SHGFI_SYSICONINDEX | SHGFI_SMALLICON ); himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,      0,      &sfi,      sizeof(SHFILEINFO),      SHGFI_SYSICONINDEX | SHGFI_LARGEICON); if (himlSmall && himlLarge) {  ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,      (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);    ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,      (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge); } return TRUE;}步骤2:  给列表添加指定文件, 同该文件图标索引, 给 list 添加图标int GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected) ; //  向前声明void AddFiles(CListCtrl & list, LPCTSTR lpszFileName, BOOL bAddToDocument){ int nIcon = GetIconIndex(lpszFileName, FALSE, TRUE); CString strSize; CFileFind filefind; //  get file size if ( filefind.FindFile(lpszFileName)) {  filefind.FindNextFile();  strSize.Format("%d", filefind.GetLength()); } else  strSize = "0"; // split path and filename CString strFileName = lpszFileName; CString strPath; int nPos = strFileName.ReverseFind('\\'); if (nPos != -1) {  strPath = strFileName.Left(nPos);  strFileName = strFileName.Mid(nPos 1); } // insert to list int nItem = list.GetItemCount();//list.InsertItem(nItem, strFileName, nIcon); //list.SetItemText(nItem, 1, strSize); // // 根据实际需要修改代码 //}     --------------------------------------------------------------------------------19. listctrl内容进行数据量更新避免闪烁      m_list.SetRedraw(FALSE);      //更新内容      m_list.SetRedraw(TRUE);      m_list.Invalidate();      m_list.UpdateWindow();20. 清除 ListCtrl 重新初始化:      // 删除所行 m_ctrllist.DeleteAllItems() ;     // 删除所列 int iColCount = m_ctrllist.GetHeaderCtrl()->GetItemCount() ;  //  1 // 原理: 删除第, 其列向前移 while( m_ctrllist.DeleteColumn(0) ) ;    //  2 for (int i=0; i < iColCount ; i ) {  m_ctrllist.DeleteColumn(0); } //  3 for (int i=iColCount-1; i >= 0; i-- ) {  m_ctrllist.DeleteColumn( i ); }

0 0
原创粉丝点击