CListCtrl

参考:CListCtrl控件详解-CSDN博客

一、难理解的特殊函数

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当自绘制控件的可视部分改变时被调用
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值