list control控件(一)
来源:互联网 发布:戏曲服装淘宝网 编辑:程序博客网 时间:2024/06/10 21:25
list control控件(一)
以下未经说明,listctrl 默认view 风格为report
-------------------------------------------------------------------------------
1. CListCtrl 风格
直观的理解:windows资源管理器,"查看"标签下的"大图标,小图标,
列表,详细资料
--------------------------------------------------------------------------------
2. 设置listctrl 风格及扩展风格
前窗口style
用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的
listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格
注:listview的style请查阅msdn
3. 插入数据
//插入列
-------------------------------------------------------------
4. 一直选中item
选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS
-------------------------------------------------------------
5. 选中和取消选中一行
int nIndex = 0;
//选中
m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
LVIS_FOCUSED);
------------------------------------------------------------
6. 得到listctrl中所有行的checkbox的状态
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
{
str.Format(_T("第%d行的checkbox为选中状态"), i);
AfxMessageBox(str);
}
}
------------------------------------------------------------
7. 得到listctrl中所有选中行的序号
方法一:
LVIS_SELECTED )
方法二:
on nItem here
8. 得到item的信息
关于得到设置item的状态,还可以参考msdn文章
ClistCtrl
9. 得到listctrl的所有列的header字符串内容
10. 使listctrl中一项可见,即滚动滚动条
m_list.EnsureVisible(i, FALSE);
11. 得到listctrl列数
int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
12. 删除所有列
方法一:
因为你删除了第一列后,后面的列会依次向上移动。
方法二:
删除行:BOOL DeleteItem(int nItem);删除指定的索引为nItem的行内容。有时候我们会先选中某行,然后删除,这个时候需要用到函数int GetNextItem(int nItem, int nFlags);从指定的索引nItem(不包括该索引,如果要包括该行的话,设置nItem -1即可)开始寻找满足nFlags条件的Item,成功则返回找到的Item的索引(如果有多个,则返回第一个),失败返回-1.这样的话如果要删除选中的某行,则可以这样实现 m_StoreItems.DeleteItem(m_StoreItems.GetNextItem(-1,LVNI_SELECTED));(建议设置扩展风格时,把整行选中设置进来this->m_StoreItems.SetExtendedStyle( LVS_EX_FULLROWSELECT);这样选中的时候就是一行了,否则会是一格)。如果要删除多行选中的,则可以用下面的代码:
int nIndex;
do
{
nIndex = m_StoreItems.GetNextItem(-1,LVNI_SELECTED);
m_StoreItems.DeleteItem(nIndex);
} while (nIndex != -1);
13. 得到单击的listctrl的行列号
添加listctrl控件的NM_CLICK消息相应函数
14. 判断是否点击在listctrl的checkbox上
添加listctrl控件的NM_CLICK消息相应函数
{
DWORD dwPos = GetMessagePos();