CListCtrl的基本用法

2021-06-22 18:22:25 字數 4089 閱讀 8894

一、風格

clistctrl有四種風格:

lvs_icon        //大圖示

lvs_smallicon//小圖示

lvs_list//列表

lvs_report//詳細資料,最常用的就是這種風格了

風格設定在屬性頁可以直接設定,也可以用函式setview來設定。

二、設定擴充套件風格

常見的擴充套件風格有:

lvs_ex_fullrowselect:選中某項時,使該項所在的整行都高亮顯示(只適用於lvs_report風格)

lvs_ex_gridlines:顯示網格線(只適用於lvs_report風格)

lvs_ex_checkboxes:item前生成checkbox控制項

lvs_ex_trackselect:當設定這種風格的時候,使用者可以隔項選取

lvs_singlesel:禁止使用者一次選擇多項

lvs_showselalways:listctrl在失去焦點時,已選擇的項仍處於高亮狀態

示例**如下:

dword dwstyle = m_list.getextendedstyle();//獲得當前擴充套件風格  

dwstyle |= lvs_ex_fullrowselect;

dwstyle |= lvs_ex_gridlines;

m_list.setextendedstyle(dwstyle); //設定擴充套件風格

三、插入資料

int insertcolumn( int ncol, lpctstr lpszcolumnheading, int nformat = lvcfmt_left, int nwidth = -1, int nsubitem = -1 );
ncol:插入列的索引(index),從0開始。

lpszcolumnheading:插入列的標題。

nformat:標誌出該列的對齊方式。lvcfmt_left(左對齊), lvcfmt_right(右對齊), lvcfmt_center(居中)

nwidth:寬度,以畫素為單位。預設值-1表示不設定寬度。

返回值:操作成功返回插入列的索引,否則返回-1.

m_list.insertcolumn(0,text("姓名"));

m_list.insertcolumn(1,text("學號"),lvcfmt_right,200);

m_list.insertcolumn(2,text("成績"),lvcfmt_center);

2)插入行

2.1

int insertitem( const lvitem* pitem );         

int insertitem( int nitem, lpctstr lpszitem );

int insertitem( int nitem, lpctstr lpszitem, int nimage );

int insertitem( uint nmask, int nitem, lpctstr lpszitem, uint nstate, uint nstatemask, intnimage, lparam lparam );

以上函式用於插入乙個新的行,並且設定這個行的第乙個字段(列)。常用的是第二和第三個。

nitem:標誌出要插入行的索引。

lpszitem:該行第乙個欄位的標題。

nimage:表示該行的圖示的索引。

返回值:操作成功返回插入行的索引,失敗返回-1.

例:

m_list.insertitem(0,text("第一行"));

m_list.insertitem(1,text("第二行"));

若要設定行圖示,首先需要乙個cimagelist物件。

cimagelist m_imagelist;

m_imagelist.create(16,16,0,2,2);//五個引數分別表示寬、高、影象的型別、影象列表初始可容納影象的個數、當初始可容納個數不夠時,每次增加的個數

然後我們把cimagelist和clistctrl關聯起來: 

m_list.setimagelist(&m_imagelist,lvsil_small);
這樣,當我們插入行的時候,會自動為該行用影象列表的第乙個圖示作為圖示。

當然我們插入行的時候,也可以指定用第幾個圖示作為圖示:

m_list.insertitem(1,text("第二行"),2);

2.2

bool setitemtext( int nitem, int nsubitem, lptstr lpsztext );
該函式用來設定某一行的所有字段(列)。

nitem:要設定的行的索引。

nsubitem:要設定的字段(列)的索引。

lpsztext:該字段的標題。

返回值:成功返回非0值,失敗返回0。

例:

m_list.setitemtext(0,1,text("第一行第二列"));

m_list.setitemtext(1,2,text("第二行第三列"));

四、獲取總列數。

int ncolumn = m_list.getheaderctrl()->getitemcount();

五、獲取總行數。

int ncount =m_list.getitemcount();
六、獲取當前選中行的索引。

int getselectionmark( );

返回當前選中行的索引,沒有任何行選中返回-1.單行選擇的時候,用這個函式很方便。

當列表是多行選擇的時候:

position pos = m_list.getfirstselecteditemposition();

if (pos == null)

else

}

七、獲取某行某列的內容

int getitemtext( int nitem, int nsubitem, lptstr lpsztext, int nlen ) const;

cstring getitemtext( int nitem, int nsubitem ) const;

nitem:行數

nsubitem:列數

lpsztext:獲取該行該列的內容的緩衝區。

nlen:上述緩衝去的大小。以字元數為單位。

第乙個函式返回獲取內容的大小(字元數),第二個函式返回獲取的內容。

八、為某行繫結乙個資料

bool setitemdata( int nitem, dword dwdata );

nitem:行數。

dwdata:乙個32為的數值。該數值的含義任意,自己定義,也只有自己知道。

然後我們可以通過函式

dword getitemdata( int nitem ) const;
來獲得這個值。根據這個值以及我們自己定義的含義,我們可以快速地知道該行的某些資訊。

九、刪除所有行和列。

m_list.deleteallitems();//刪除所有行

while(m_list.deletecolumn (0));//刪除所有列。因為刪除第」0「列後,後面的一列就自動變成了新的第」0「列,所以乙個空迴圈即可解決。

十、為clistctrl新增右鍵選單。

右鍵該clistctrl控制項,在其控制項事件列中找到nm_rclick,新增該事件。

void c***dlg::onnmrclicklist1(nmhdr* pnmhdr, lresult* presult)

*presult = 0;

}

CListCtrl列表控制項的基本用法

列表控制項是基本經常用到的控制項,這裡總結一下,方便以後使用。需要設定的屬性 view report 一般為報表 edit labels true 控制項可以重新命名 always show selection true 設定選中焦點 變數繫結控制項clistctrl m list 列表控制項 vo...

CListCtrl用法 收藏

1。先來介紹report型別的clistctrl 首先使用下面的語句設定clistctrl的style dword setextendedstyle dword dwnewstyle 其中lvs ex checkboxes 表示新增checkbox lvs ex fullrowselect 表示選擇...

整理 CListCtrl基本操作

2011 0217 將題頭定義成配置陣列,便於維護 typedef struct tag list ctrl title tag list ctrl title,ptag list ctrl title 2013 08 31 17 13 07 dwcntprocesses 0x6d 2013 08 ...