CListCtrl的用法總結

來源:互聯網
上載者:User
1 CListCtrl的風格

CListCtrl的風格有四種:

  • LVS_ICON: 為每個item顯示大表徵圖
  • LVS_SMALLICON: 為每個item顯示小表徵圖
  • LVS_LIST: 顯示一列帶有小表徵圖的item
  • LVS_REPORT: 顯示item詳細資料

分別對應著資源管理員查看菜單下的大表徵圖,小表徵圖,列表,詳細資料。

可以在控制項屬性視圖下設定:View屬性.

也可以用代碼來設定,如下:

DWORD SetView(   int iView );

以下解說均以report風格為例.

2 設定CListCtrl風格及擴充風格

擷取及設定風格程式碼範例代碼如下:

LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//擷取當前視窗stylelStyle &= ~LVS_TYPEMASK; //清除顯示方式位lStyle |= LVS_REPORT; //設定styleSetWindowLong(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_av.InsertColumn(0,"PID");m_list_av.InsertColumn(1,"name");m_list_av.InsertColumn(2,"value");CRect rect;m_list_av.GetClientRect(rect);                    //獲得當前客戶區資訊m_list_av.SetColumnWidth(0,rect.Width()/6);       //設定列的寬度。m_list_av.SetColumnWidth(1,rect.Width()/2);m_list_av.SetColumnWidth(2,rect.Width()/3);

也可用另一種方式,如:

m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列,LVCFMT_LEFT為對齊,40為列寬m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

插入行,範例程式碼如下:

CString str;for(int i=0; i<m_av_count; i++){m_list_av.InsertItem(i,m_avs[i].name);str.Format("%04x",m_avs[i].pid);m_list_av.SetItemText(i,0,str);m_list_av.SetItemText(i,1,m_avs[i].name);GetValueAsStirng(&m_avs[i],str);m_list_av.SetItemText(i,2,str);}

另一個樣本如下:

CString strText;int nColumnCount = m_myListCtrl.GetHeaderCtrl()->GetItemCount();// Insert 10 items in the list view control.for (int i = 0; i < 10; i++){strText.Format(TEXT("item %d"), i);// Insert the item, select every other item.m_myListCtrl.InsertItem(LVIF_TEXT | LVIF_STATE, i, strText, (i % 2) == 0 ? LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0);// Initialize the text of the subitems.for (int j = 1; j < nColumnCount; j++){strText.Format(TEXT("sub-item %d %d"), i, j);m_myListCtrl.SetItemText(i, j, strText);}}
4 一直選中一行

在預設情況下,當選一行,再點擊其它地方時,原先選中的一行會推動高亮顯示,如果你想保留高亮顯示,則可以在屬性面板上找到屬性Always Show Selection,並設定為true.

也可用設定擴充風格的方式設定,如:

dwStyle |= LVS_SHOWSELALWAYS;m_list.SetExtendedStyle(dwStyle); //設定擴充風格
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);

另一種方式,包含擷取選擇項和設定:

// Set the selection mark to the first item only if no other item is // selected.if (m_myListCtrl.GetSelectionMark() == -1)m_myListCtrl.SetSelectionMark(0);

在單選時可用以上方法。

6 擷取選擇項
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    }}

擷取單選項的範例程式碼:

POSITION pos =m_CLC_Record.GetFirstSelectedItemPosition();if (pos == NULL){AfxMessageBox("請先選擇一項記錄!");return;}else{int nSel =m_CLC_Record.GetNextSelectedItem(pos);//do something}

 

7 綁定資料
// If any item's data is equal to zero then reset it to -1.for (int i=0; i < m_myListCtrl.GetItemCount(); i++){if (m_myListCtrl.GetItemData(i) == 0){m_myListCtrl.SetItemData(i, (DWORD) -1);}}

參考:http://www.cnblogs.com/cy163/archive/2006/10/15/529790.html

 8 隱藏表頭

有兩種方法:

第一種:在屬性面板中找到No Column Header屬性,設定為true。

第二種:動態建立時使用LVS_NOCOLUMNHEADER。

 

9 擷取總行數
int nCount =m_myListCtr.GetItemCount();
 10 滾屏
//滾屏m_CLC_Record.EnsureVisible(nCount-1,false);
 11 雙擊一行

為CListCtrl添加NM_DBLCK事件.

範例程式碼:

void CTestDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult){LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: Add your control notification handler code hereNMLISTVIEW* pMListView=(NMLISTVIEW*) pNMHDR;    int nIndex = pMListView->iItem;RecordData *pdata =(RecordData *)m_CLC_Record.GetItemData(nIndex);m_ComboSendType.SetCurSel(pdata->SendFmt);m_ComboSendFrmType.SetCurSel(pdata->FrameType);m_ComboSendFrmFmt.SetCurSel(pdata->FramFmt);m_EditSendFrmID.Format("%08x",pdata->FrameID);m_EditSendData =m_CLC_Record.GetItemText(nIndex,4);m_Delay =pdata->DelayTime;UpdateData(false);*pResult = 0;}
12 擷取Item字串
m_EditSendData =m_CLC_Record.GetItemText(nIndex,4);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.