一、难理解的特殊函数
1、GetFirstSelectedItemPosition();
返回值是个指针,获取的是当前位置的指针
GetNextSelectedItem();
返回值是int,参数是position类的一个指针,根据参数,获取当前位置的索引。
把列表看做是一个数组,获取的是该数组(pos指针)的下标
1.1 表格的copy
POSITION pos = m_lst.GetFirstSelectedItemPosition();
if(NULL != pos)
{
m_iCopyItem = m_lst.GetNextSelectedItem(pos);//用全局变量记录要copy的项索引/行号
}
1.2 表格的paste
POSITION pos = m_lstStyle.GetFirstSelectedItemPosition();//获取项目位置指针
if(NULL != pos)
{
CString szFileName;
szFileName.Format(_T("%03d.txt"), m_iCopyItem);
//...加载m_iCopyItem项内容
//获取要进行粘贴位置的项目索引
int iCurSel = m_lstStyle.GetNextSelectedItem(pos);//获取项目位置索引
//...保存iCurSel项内容
}
1.3 表格的删除
POSITION pos = m_lstStyle.GetFirstSelectedItemPosition();//项目位置指针
if(NULL != pos)
{
if(IDYES == AfxMessageBox(_T("您确实想删除当前选中的文件吗?"), MB_YESNO | MB_ICONQUESTION))
{
int iCurSel = m_lstStyle.GetNextSelectedItem(pos);//项目位置索引
}
}
1.4 项目索引项变更后
void CDlg::OnLvnItemchangedListData(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
POSITION pos = m_lst.GetFirstSelectedItemPosition();//当前项目位置指针
if(NULL != pos)
{
int iCurSel = m_lst.GetNextSelectedItem(pos);//当前项目位置索引
//...加载新选择的 项目
CString szFileName;
szFileName.Format(_T("%03d.xml"), iCurSel);
}
}
2、单击 表格
LRESULT CDlg::OnListctrlLinkhit(WPARAM wParam, LPARAM lParam)
int iItem = LOWORD(wParam);//参数1的低位 行号
int iSubItem = HIWORD(wParam);//参数1的高位 列号
参数2 lParam:指针,可以传递数据;
3、 CListCtrl::SetItemState:设定列表视图控件中某一项的状态。
BOOL SetItemState(int nItem, LVITEM* pItem)
BOOL SetItemState(int nItem, UINT nState, UINT nMask)
参数1:nItem表示哪一项;
参数2:nState表示第nItem项的 新状态;
参数3:nMask表示要改变的状态位掩码;
举例说明参数2,3的作用:
如下设置了第1项的0x0002位为0x0002(意思为:把之前的选中状态仍然设置为选中状态)
m_lst.SetItemState(1, LVIS_SELECTED, LVIS_SELECTED);
如下设置了第1项的0x0002位为0x0000(意思为:把之前的选中状态仍然设置为空状态)
m_lst.SetItemState(1, 0, LVIS_SELECTED);
注意:这里有些绕,按常理不用参数3,直接设置nItem项为一个状态nState,但是这里还是这个设置了。
不过另外还有一个巧用:
当我们对一个List用check进行筛选的时候,之前如果选中过一行,再点击这个check的时候,遍历List的所有项,筛选符合当前check的项。假设用一个struct数组vector<List_Info> veList1存储List中的信息,用另一个struct数组vector<List_Info> veListFilter存储符合check的筛选中的信息。
typedef struct List_Info
{
UINT nLogIndex;
SYSTEMTIME tTime;
int iType;
CString szInfo;
} List_Info;
enum
{
LOG_INFO = 0,
LOG_WARNING = 1,
LOG_CRITICAL = 2,
LOG_DEBUG = 3
};
//在list的单击事件响应函数中设置(veList1列表中选中行的行号)
m_nSelInfoNo = veList1[pNMListView->iItem].nLogIndex;
//在check的过滤函数数设置
BOOL bInfo = (((CButton*)GetDlgItem(IDC_CHECK_SYSLOG_INFO))->GetCheck() == 1);//当前check的状态
BOOL bWarning = (((CButton*)GetDlgItem(IDC_CHECK_SYSLOG_WARNING))->GetCheck() == 1);
BOOL bCritical = (((CButton*)GetDlgItem(IDC_CHECK_SYSLOG_CRITICAL))->GetCheck() == 1);
BOOL bDebug = (((CButton*)GetDlgItem(IDC_CHECK_SYSLOG_DEBUG))->GetCheck() == 1);
vector<List_Info>::iterator iter;//指定一个迭代器
for(iter = veList1.begin(); iter != veList1.end(); iter++)
{
if(((*iter).iType == LOG_INFO && bInfo) ||
((*iter).iType == LOG_WARNING && bWarning) ||
((*iter).iType == LOG_CRITICAL && bCritical) ||
((*iter).iType == LOG_DEBUG && bDebug))
{
veListFilter.push_back(*iter);
//重新初始化设置m_lst列表的显示内容
m_lst.InsertItem;m_lst.SetItemText;...
//对于之前可能选中的项,仍然会设置为LVIS_SELECTED,没有选中的项设置为0
m_lst.SetItemState(1,(*iter).nLogIndex == m_nSelInfoNo ? LVIS_SELECTED : 0, LVIS_SELECTED);
}
}
4、初始化列表
SetWindowText(_T("列表"));//设置窗口标题
m_lst.InsertColumn(0, _T(""), LVCFMT_LEFT, 33);//插入一列
m_lst.InsertColumn(1, _T("名称"), LVCFMT_LEFT, 190);
for(int i = 0; i < 2; i++)
{
szValue.Format(_T("%03d"), i);
m_lst.InsertItem(i, szValue);//插入一个新项(i行0列)内容
m_lst.SetItemText(i, 1, _T("检查"));//设置(i行1列)内容
}
//设置列表第n项的状态
m_lst.SetItemState(n, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
二、
构造函数
ClistCtrl | 构造一个CListCtrl对象 |
Create | 创建列表控件并将其附加给CListCtrl对象 |
属性
GetBkColor | 获取列表视图控件的背景色 |
SetBkColor | 设置列表视图控件的背景色 |
GetImageList | 获取用于绘制列表视图项的图象列表的句柄 |
SetImageList | 指定一个图象列表到列表视图控件 |
GetItemCount | 获取列表视图控件中的项的数量 |
GetItem | 获取列表视图项的属性 |
GetCallbackMask | 获取列表视图控件的回调掩码 |
SetCallbackMask | 设置列表视图控件的回调掩码 |
GetNextItem | 查找指定特性和指定指定项关系的列表视图项 |
GetFirstSeletedItemPosition | 在列表视图控件中获取第一个选择的列表视图项的位置 |
GetNextSeletedItem | 为重复而获取下一个选择的列表视图 |
GetItemRect | 获取项的有界矩形 |
SetItemPosition | 在列表视图控件中移动一项到指定位置 |
GetItemPosition | 获取列表视图项的位置 |
GetStringWidth | 指定需要显示所有指定字符串的最小列宽 |
GetEditControl | 获取用于编辑一个项文本的编辑控件的句柄 |
GetColumn | 获取控件的列的属性 |
SetColumn | 设置列表视图列的属性 |
GetColumnWidth | 获取报表视图或列表视图中的列的宽度 |
SetColumnWidth | 改变报表视图或列表视图中的列的宽度 |
GetCheck | 获取与某项相关的状态图象的当前显示状态 |
SetCheck | 设置与某项相关的状态图象的当前显示状态 |
GetViewRect | 获取列表视图控件中所有项的有界矩形 |
GetTextColor | 获取列表视图控件的文本颜色 |
SetTextColor | 设置列表视图控件的文本颜色 |
GetTextBkColor | 获取列表视图控件的文本背景色 |
SetTextBkColor | 设置列表视图控件的文本背景色 |
GetTopIndex | 获取最高级项的索引 |
GetCountPerPage | 计算可正好垂直放入列表视图控件中的项的数目 |
GetOrigin | 获取列表视图控件的最初的当前视图 |
SetItemState | 改变列表视图控件的项的状态 |
GetItemState | 获取列表视图控件的项的状态 |
GetItemText | 获取列表视图项或子项的文本 |
SetItemText | 设置列表视图项或子项的文本 |
SetItemCount | 准备一个列表视图控件以添加大量的项 |
GetItemData | 获取与某项相关的应用所指定的值 |
SetItemData | 设置项的应用指定的值 |
GetSelectedCount | 获取列表视图控件中选择项的数量 |
SetColumnOrderArray | 设置列表视图控件的列序(左或右) |
GetColumnOrderArray | 获取列表视图控件的列序(左或右) |
SetIconSpacing | 设置列表视图控件中的图标的距离 |
GetHeaderCtrl | 获取列表视图控件的标题控件 |
GetHotCursor | 获取在热调试对列表视图控件有效时使用的游标 |
SetHotCursor | 设置在热调试对列表视图控件有效时使用的游标 |
GetSubItemRect | 获取列表视图控件中某项的有界矩形 |
GetHotItem | 获取当前在游标下的列表视图项 |
SetHotItem | 设置列表视图控件的当前热项 |
GetSelectionMark | 获取列表视图控件的选择屏蔽 |
SetSelectionMark | 设置列表视图控件的选择屏蔽 |
GetExtendedStyle | 获取列表视图控件的当前扩展风格 |
SetExtendedStyle | 设置列表视图控件的当前扩展风格 |
SubItemHitTest | 指定哪个列表视图项在指定位置,若存在 |
GetWorkAreas | 获取列表视图控件的当前工作区 |
GetNumberOfWorkAreas | 获取列表视图控件的当前工作区数量 |
SetItemCountEx | 设置虚列表视图控件的项的数量 |
SetWorkAreas | 设置列表视图控件中图标可以显示的区域 |
ApproximateViewRect | 指定显示列表视图控件项所需的宽度和高度 |
GetBkImage | 获取列表视图控件的当前背景图象 |
SetBkImage | 设置列表视图控件的当前背景图象 |
GetHoverTime | 获取列表视图控件的当前逗留时间 |
SetHoverTime | 设置列表视图控件的当前逗留时间 |
操作
InsertItem | 在列表视图控件中插入一个新项 |
DeleteItem | 从控件中删除一项 |
DeleteAllItems | 从控件中删除所有项 |
FindItem | 查找具有指定的字符的列表视图项 |
SortItems | 使用应用定义的比较函数排序列表视图项 |
HitTest | 指定哪个列表视图在指定的位置上 |
EnsureVisible | 保证项是可见的 |
Scroll | 滚动列表视图控件的内容 |
ReDrawItems | 强迫列表视图控件刷新一些项 |
Update | 强迫控件刷新一个指定的项 |
Arrange | 调整一栏里的项 |
EditLabel | 开始项文本该处编辑 |
InsertColumn | 插入列表视图控件中的新列 |
DeleteColumn | 从列表视图控件中删除一列 |
CreateDragImage | 为指定的项构造一个拖动图象列表 |
可覆盖的函数
DrawItem | 当自绘制控件的可视部分改变时被调用 |