CListCtrl控件详解(一)

1、视图类别
列表视图控件可用四种不同方式显示其内容,称之为”视图“,有以下四个类别:
图标视图:每一项以全尺寸图标(32×32像素)出现,下面有一个标签。用户可在列表视图窗口拖动项到任意位置。
小图标:视图每一项以小图标(16×16像素)出现,右边有一个标签。用户可在列表视图窗口拖动项到任意位置。
列表视图:每一项以小图标出现,下面有一个标签。项按列排列,不能拖动到列表视图窗口的任何位置。
报表视图:每一项在本行上出现,右边有排列成列的附加信息。最左边的列包含小图标和标签,下一列包含应用指定的子项。
2、构造函数
CListCtrl::Create()创建列表控件并将其附加给CListCtrl对象,函数原型:
virtual BOOL Create(
DWORD dwStyle, //控件风格
const RECT& rect,//位置和大小
CWnd* pParentWnd,//父窗口
UINT nID //ID标识
);
dwStyle:LVS_ALIGNLEFT,指定条款左对齐且是”图标视图“或”小图标视图“。
LVS_ALIGNMASK,决定控件当前靠齐方式。
LVS_ALIGNTOP,指定条款顶端对齐且是”图标视图“或”小图标视图“。
LVS_AUTOARRANGE,图标自动保持小图标和图标视图。
LVS_EDITLABELS,Item的文本可以编辑。父窗口处理通知消息: LVN_ENDLABELEDIT。
LVS_ICON,指定图标视图。
LVS_LIST,指定列表视图。
LVS_NOCOLUMNHEADER,在report类别的视图中不显示列头,report类别默认是显示列头的。
LVS_NOLABELWRAP,在icon视图中,Item的文本在单行显示。Icon视图下可能多行。
LVS_NOSCROLL,屏蔽滚动条,所有item必须在客户区内。该风格与list和report视图不兼容。
LVS_NOSORTHEADER,列头没有按钮功能。在report视图中,点击列头不执行操作时候(比如排序),可以使用该风格
LVS_OWNERDATA,指定一个虚拟的ListView, 由用户自己管理Item数据。
LVS_OWNERDRAWFIXED,允许自绘。
LVS_REPORT,该风格决定一个report视图,当对ClistCtrl使用该风格时候,第一列总是左对齐。你不能使用LVCFMNT_RIGHT改变列的对齐方式。
LVS_SHAREIMAGELISTS,在视图控件销毁时,不删除与之关联的imagelist控件。该风格可以使多个listctrl使用同样的imagelist。
LVS_SHOWSELALWAYS,使listctrl控件一直处于选中状态,即使该控件没有焦点(鼠标移动到某项上自动变为选中)。
LVS_SINGLESEL,在同一时间只有一个item可以被选择,默认情况下是可以有多个items被选择的。
LVS_SMALLICON,指定小图标视图类别。
LVS_SORTASCENDING,item索引基于item的文本升序排列。
LVS_SORTDESCENDING,item索引基于item的文本降序排列。
LVS_TYPEMASK,决定当前窗口风格(是否屏蔽设置的视图类别如:LVS_ICON)。可以确定当前视图的窗口风格。
LVS_TYPESTYLEMASK,决定窗口风格,控制item对齐方式和头显示以及其它行为。
备注:由于LVS_LIST和LVS_REPORT风格的视图根据索引以相同的方式排列显示,索引这两个类别的视图的排序结果能立即体现给用户。关于LVS_ICON 和LVS_SMALLICON这两个视图不使用索引决定icons的位置,所以它们排序结果不能体现给用户。
你可以使用LVS_TYPEMASK风格从获得当前列表的视图类别。
你可以使用LVS_ALIGNMASK风格获得视图列表当前靠齐方式。
你可以使用LVS_TYPESTYLEMASK风格获得对齐方式(LVS_ALIGNTOP 、LVS_ALIGNLEFT)和头显示和行为(LVS_NOCOLUMNHEADER、LVS_NOSORTHEADER)的的风格。
eg:
m_ListCtrl.Create(WS_BORDER|WS_DLGFRAME|WS_VISIBLE|LVS_REPORT/|LVS_NOLABELWRAP/|LVS_SHOWSELALWAYS,\
CRect(16,90,780,580), this, 101);

//设置扩展风格
m_ListCtrl.SetExtendedStyle(LVS_SHOWSELALWAYS|LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

//设置背景颜色
m_ListCtrl.SetBkColor(RGB(255,255,255));

//设置第一行为选中状态
int nIndex = 0;
      m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

//设置列表控件显示图标
UINT nIconID[] = {IDI_ICON1,IDI_ICON2,IDI_ICON3};
m_ImageList.Create(32, 32, /*ILC_COLORDDB|ILC_MASK*/ILC_COLOR24, sizeof(nIconID)/sizeof(UINT), 1); 
m_ImageList.SetBkColor(RGB(255,255,255));
for(int i = 0; i < sizeof(nIconID)/sizeof(UINT); i++)
{
    m_ImageList.Add(AfxGetApp()->LoadIcon(nIconID[i]));//将图标添加到CImageList
}
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);

//插入三列
m_ListCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 255);
      m_ListCtrl.InsertColumn(1, _T("性别"), LVCFMT_LEFT, 255);
      m_ListCtrl.InsertColumn(2, _T("出生日期"), LVCFMT_LEFT, 270);

//插入两行数据
m_ListCtrl.InsertItem(0, L"王二小", 0);
m_ListCtrl.SetItemText(0, 1, L"男");
m_ListCtrl.SetItemText(0, 2, L"1992");
m_ListCtrl.InsertItem(1, L"张三", 1);
m_ListCtrl.SetItemText(1, 1, L"男");
m_ListCtrl.SetItemText(1, 2, L"1987");

3、风格设置
ModifyStyle()用来设置”视图“类别,参数:LVS_ICON为图标视图
LVS_SMALLICON为小图标视图
LVS_LIST为列表视图
LVS_REPORT为报表视图
为防止用户出错, 微软干脆把LVS_ICON, LVS_SMALLICON, LVS_LIST, LVS_REPORT这些都不设置成位标志,因此不能叠加.同时还设置了一个多余的掩码:LVS_TYPEMASK.它是用来屏蔽的。
例如,我们要判断一个CListCtrl的风格,以下写法是错误的:
DWORD dwStyle = m_listctrl.GetStyle( );
// 判断是否大图标样式
if( dwStyle & LVS_ICON )
……
正确的方法为使用掩码:
DWORD dwStyle = m_listctrl.GetStyle( ) & LVS_TYPEMASK;
if( dwStyle = = LVS_ICON)
……
同理,我们在改变风格时应该这样写:
ModifyStyle( LVS_TYPEMASK, LVS_ICON);
SetWindowLong()可以设置新的”视图“类别和控件风格:
DWORD dwStyle = ::GetWindowLong(m_report.m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
SetWindowLong(m_report.m_hWnd, GWL_STYLE, dwStyle|LVS_REPORT|LVS_NOCOLUMNHEADER
| LVS_NOLABELWRAP| LVS_EDITLABELS);
4、扩展风格设置
SetExtendedStyle()/GetExtendedStyle()为设置/获得控件的扩展风格,重要参数:
LVS_EX_CHECKBOXES,带复选框
LVS_EX_FULLROWSELECT,选中某行后,整行高亮(只适用于REPORT风格)
LVS_EX_GRIDLINES,网状线(只适用于REPORT风格)
…….
举例1:

      DWORD dwStyle = GetExtendedStyle();
      dwStyle |= LVS_EX_FULLROWSELECT; 
      dwStyle |= LVS_EX_GRIDLINES;
      SetExtendedStyle(dwStyle);

举例2:
m_ListCtrl.SetExtendedStyle(LVS_EX_FLATSB //扁平风格显示滚动条
|LVS_EX_FULLROWSELECT //允许整行选中
|LVS_EX_HEADERDRAGDROP //允许整列拖动
|LVS_EX_ONECLICKACTIVATE //单击选中项
|LVS_EX_GRIDLINES); //画出网格线
5、其它风格设置
获取与设置列表控件的背景色:GetBkColor、SetBkColor
获取与设置文字背景色:GetTextBkColor、SetTextBkColor
获取与设置文字前景色:GetTextColor、SetTextColor
6、数据插入
插入一列标题:m_listCtrl.InsertColumn(0, L”项目一”, LVCFMT_LEFT 80);
0是索引项,”项目一”为列标题,LVCFMT_LEFT为对齐方式,80为列宽。
获取与设置列宽:GetColumnWidth、SetColumnWidth
插入一行数据:m_ListCtrl.InsertItem(0, L”王二小”); //插入第一行,且将第一列的值设为”王二小”
m_ListCtrl.SetItemText(0, 1, L”男”); //将第一行第二列的值设为“男”
m_ListCtrl.SetItemText(0, 2, L”1987”);//将第一行第二列的值设为“1987”
获取与设置行附加数据:GetItemData、SetItemData
7、选中和取消选中
选中第一行:int nIndex = 0;
m_ListCtrl.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
取消选中第一行:m_ListCtrl.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);
允许多行选中时,获取选中的行数:GetSelectedCount
单行选中时,获取选中的行:GetSelectionMark
获取某行的状态是否为选中:GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED

转载改编自:http://www.xuebuyuan.com/2122805.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值