CListCtrl的基本用法

一、风格

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); //设置扩展风格


三、插入数据

1)插入列标题:InsertColumn

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表示不设置宽度。

nSubItem:与列相关联的子项的索引。不知道这个参数有什么用,反正一般不设。

返回值:操作成功返回插入列的索引,否则返回-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);//五个参数分别表示宽、高、图像的类型、图像列表初始可容纳图像的个数、当初始可容纳个数不够时,每次增加的个数
m_ImageList.Add(theApp.LoadIcon(IDI_ICON1));
m_ImageList.Add(theApp.LoadIcon(IDI_ICON2));

 然后我们把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
{
   while (pos)
   {
      int nItem = m_list.GetNextSelectedItem(pos);
      //nItem就是选中的行了。
   }
}
七、获取某行某列的内容

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 CXXXDlg::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    if(pNMItemActivate->iItem != -1)
    {
        CMenu menu;   
        menu.LoadMenu(IDR_MENU1);     
        CMenu *pMenu=menu.GetSubMenu(0);   
        CPoint pos;   
        GetCursorPos(&pos);   
        pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,this); 
    }
    *pResult = 0;
}











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值