VS2008下的CListCtrl控件的使用
最近要适应VS这个开发环境,从VC6移植到VS有很多不习惯.在一个小程序中利用到了 CListCtrl控件的时候 就出现了问题 。其实自VC6下这个控件我还是会使用的 主要指Report风格 。。
下面是VS下的CListCtrl控件的使用。。
我们利用的时候主要是针对CListCtrl的 report风格。关于CListCtrl,有基本风格和扩展风格 。 设置控件风格的API SetWindowLong(可以设置基本风格和扩展风格),还有就是CListCtrl类的
SetExtendedStyle函数可以设置扩展风格 。
下面是基本风格:
LVS_ALIGNLEFT 指定项是左对齐的
LVS_ALIGNTOP 指定靠顶部对齐
LVS_AUTOARRANGE 指定图标自动安排在大图标和小图标视图
LVS_EDITLABELS 允许项目文本进行编辑但是父窗口必须处理LVN_ENDLABELEDIT消息
LVS_ICON 指定是ICON视图
LVS_LIST 指定是列表视图
LVS_REPORT 指定是repoet风格
LVS_NOCOLUMNHEADER 指定在一个report视图列头不显示,但是默认下是显示的
LVS_NOLABELWRAP 在图标视图中单行显示项文本 ,缺省情况下项文本可以包含在图标列表
LVS_NOSCROLL 禁用scroll ,所有项必须在客户区域内 也就是我们可以看见的部分
LVS_NOSORTHEADER Specifies that column headers do not work like buttons. This style is useful if clicking a column header in report view does not carry out an action, such as sorting.
LVS_SMALLICON 指定大图标
LVS_SORTASCENDING 对项目文本按照升序方式排序
LVS_SORTDESCENDING 项目文本按照降序方式排序
LVS_SINGLESEL 在一个时间内仅仅允许一个项被选中 。默认情况下一次可以选中多个项 。
LVS_SHOWSELALWAYS 总是显示选择项 即使CListCtrl控件失去焦点
LVS_OWNERDRAWFIXED 允许窗体拥有者重回控件。列表控件发送 WM_DRAWITEM 到每一个项 。 他不会发送的消息到每个项 theDRAWITEMSTRUCT包含了将要重会的列表项的一些数据
下面是扩展风格:
LVS_EX_FULLROWSELECT 可以整行都选择 只针对于report
LVS_EX_GRIDLINES 控件有网格线
LVS_EX_CHECKBOXES 列表项前面有个复选框 CheckBox
上面这几个是常用的 还有很多扩展风格用到的时候 直接去源文件看定义。
下面这个函数可以获得控件的风格 或者扩展风格:
LONG GetWindowLong(
HWND hWnd, // handle to window
int nIndex // offset of value to retrieve
);
下面这个函数可以设置控件的风格 或者扩展风格:
LONG SetWindowLong(
HWND hWnd, // handle to window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
假设有一个指向CListCtrl对象的指针 那么我们修改他的风格:
DWORD style=::GetWindowLong(c->m_hWnd,GWL_STYLE) ;//获得控件的Style
::SetWindowLong(c->m_hWnd,GWL_STYLE,style|LVS_REPORT |LVS_NOLABELWRAP|LVS_EDITLABELS) ; //修改风格为report和可以加入图标
::SetWindowLong(c->m_hWnd,GWL_STYLE,LVS_REPORT |LVS_NOLABELWRAP|style) ;
DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; //新风格 网格和选中一行只支持report
c->SetExtendedStyle(styles) ;//设置扩展风格 其实在底层应该是调用了SetWindowLong进行风格的修改
插入列有2中方式 :可以通过位LVCOLUMN和直接插入文本
typedef struct _LVCOLUMN {
UINT mask; //位掩码 指定结构体中的那几个成员是有效的
int fmt;
int cx;
LPTSTR pszText;
int cchTextMax;
int iSubItem;
int iOrder;
int iImage;}
LVCOLUMN;
定义LVCOLUMN结构体并赋值,赋值后并且插入 具体去看看MSDN简单
LVCOLUMN lv1,lv2 ,lv3;
lv1.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH ; //设置LVCOLUMN的位掩码
lv1.pszText=_T("歌曲名字") ;//文本
lv1.cx=100 ; //列表宽是
lv1.fmt=LVCFMT_LEFT ;//文本居中显示
lv2.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH ; //设置LVCOLUMN的位掩码
lv2.pszText=_T("歌曲路径") ;//文本
lv2.cx=nWidth-200 ; //列表宽是
lv2.fmt=LVCFMT_LEFT ;//文本居中显示
lv3.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH ; //设置LVCOLUMN的位掩码
lv3.pszText=_T("歌曲长度") ;//文本
lv3.cx=100 ; //列表宽是
lv3.fmt=LVCFMT_LEFT ;//文本居中显示
c->InsertColumn(1,&lv1) ;
c->InsertColumn(3,&lv3) ;
c->InsertColumn(2,&lv2) ;
插入项的时候要注意: 一定要先插入项,再设置项的文本。
c->InsertItem(0,"ITEM1") ; //插入ITEM
c->SetItemText(0,1,"subitem") ;//设置项目的文本 从1开始 因为0是项的索引 如果SubItem多的话那么依次往后加即可
处理CListCtrl控件时候常用到的消息:
NM_CLICK 当项目列表单击的时候发送 在程序中我们需要做相应的处理
NM_DBCLICK 当项目列表双击的时候发送
但是我们要注意CListCtrl类中的2个模糊的函数
POSITION GetFirstSelectedItemPosition( ) const; //这个函数返回的是单击或者双击后 的位置 如果点击之处不在 项上面的话 那么 返回的 POSITION 是NULL 。
如果返回的POSITION 不是NULL 那么调用
int GetNextSelectedItem( POSITION& pos ) const; //通过返回的POSITION 位置 来返回点击列表项的索引 。
分享到:
相关推荐
CListCtrl控件使用方法总结
CListCtrl控件基本用法
包含19个CListCtrl控件相关代码,可以实现控件的各类编辑与操作方式,可以为你提供借鉴!
MFC,CListCtrl控件的详细使用方法
实现CListCtrl控件的Item项拖拽效果,本源码对应的博客链接为:http://blog.csdn.net/d704791892/article/details/22600075
C++ CListCtrl控件使用实例。。
VC 界面clistctrl控件的重绘 适合初学者
本例演示列表视图控件的使用,包括两个部分:一部分为列表视图控件使用实例的实现,另一部分为列表视图控件属性设置功能的实现。希望能对大家理解CListCtrl类有所帮助。
CListCtrl控件的简单使用,和登录过程实现
visual c++改变CListCtrl控件中滚动条的颜色
CListCtrl控件使用示例!!!很受用
CListCtrl控件背景颜色网格色彩,用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何...
列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值,MFC中使用CListCtrl类来封装列表控件的各种操作。
VC++ CListCtrl 控件 行高 编辑通过
CListCtrl控件 自动(多页)打印,导出到Excel-通用控件 在VC++6.0下编译通过,绝对可用,无错误 打印过程自动,会根据CListCtrl控件内容自动(多页)打印 有详细的注释 可以不修改直接使用
非常好用的扩展风格的Clistctrl控件,VC6.0和VS2005实例,附可重用类库
clistctrl控件中添加复选框,编辑框,按钮,combox控件,时间控件;
CListCtrl控件重绘类,支持获取单元格,为单元格添加图片,设置列高等。
CtreeCtrl控件向CLISTCTRL控件的拖拽