MFC CListCtrl 基本操作(一)

手动创建列表控件

	// IDC_MY_LIST 为自定义 ID 号
	m_List.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_REPORT | LVS_EDITLABELS, // 基础样式
	              recList,      // 位置
	              this, 	    // 父窗口指针
	              IDC_MY_LIST); // 资源 ID
	m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	m_List.ShowWindow(SW_SHOW);

双击单元格,获得行列索引

void classname::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	
	// 获得行、列索引
	int nItem    = pNMItemActivate->iItem;
	int nSubItem = pNMItemActivate->iSubItem;
	POSITION pos = m_listIn.GetFirstSelectedItemPosition();
	while (pos)// 当点击位置是在列表内时,执行循环体// 也可以用 if 判断
	{
		// Add your code...

		return;
	}
}

风格样式

几个常用的风格

m_list.SetExtendedStyle(m_list.GetExtendedStyle()
                        | LVS_EX_FULLROWSELECT   /*  */
                        | LVS_EX_GRIDLINES       /* 网格 */
                        | LVS_EX_DOUBLEBUFFER);  /* 虚拟列表双缓存 */
	m_list.InsertColumn(0, _T("名字"), LVCFMT_CENTER, 50);
	m_list.InsertColumn(1, _T("身高"), LVCFMT_CENTER, 60);
	m_list.InsertColumn(2, _T("体重"), LVCFMT_CENTER, 60);
	m_list.InsertColumn(3, _T("测量时间"), LVCFMT_CENTER, 180);

	m_list.InsertItem(0, _T("张三"));
	m_list.SetItemText(0, 1, _T("178CM"));
	m_list.SetItemText(0, 2, _T("70KG"));
	m_list.SetItemText(0, 3, _T("2009年1月15日23时40分"));

虚拟列表

  • 用 OnTimer、 .Invalidate()、 .UpdateWindow() 控制数据刷新频率
  • 用 LVS_EX_DOUBLEBUFFER 风格样式控制闪烁
  • 用 memDC 也可以控制闪烁
  • 用 m_list.SetItemCount() 设置显示行数,而不是 InsertItem
// 显示列表信息
void CDlgPageInput::OnLvnGetdispinfoListIn(NMHDR *pNMHDR, LRESULT *pResult)
{
	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码

	LV_ITEM	 *pDispItem = &(pDispInfo)->item;
	*pResult = 0;

	if ((pDispItem->mask & LVIF_TEXT))
	{
		switch (pDispItem->iSubItem)
		{
		case 0:// 示例
			_stprintf_s(pDispItem->pszText, 128, _T(""), ....); break;
			break;
		case 1:// 示例
			lstrcpy(pDispItem->pszText, ....);					break;
		//......
		default:
			break;
		}
	}
}

获得单元格 Rect

CRect CMyList::GetCellRect(int idxRow, int idxCol)
{
	CRect recCell;
	if (idxCol > 0)
	{
		GetSubItemRect(idxRow, idxCol, LVIR_BOUNDS, recCell);
	}
	else
	{
		GetItemRect(idxRow, recCell, LVIR_BOUNDS);
		recCell.right = GetColumnWidth(0);
		recCell.left = 0;
	}
	return recCell;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值