VC下MFC的CListCtrl的使用与技巧(Use CListCtrl)

作者:Wupei  |  发表时间:  |  所属分类:VC

1.CListCtrl显示样式的改变

m_pCtrl = &this->GetListCtrl();	//获得指针

//CListCtrl样式改变
LONG lStyle;
lStyle = GetWindowLong(m_pCtrl->m_hWnd, GWL_STYLE);	//获取当前窗口style
lStyle &= ~LVS_TYPEMASK;	//清除显示方式
lStyle |= LVS_REPORT;	//设置style为Report显示
SetWindowLong(m_pCtrl->m_hWnd, GWL_STYLE, lStyle);	

//CListCtrl扩展样式改变
DWORD dwStyle;
dwStyle = m_pCtrl->GetStyle();	//取得样式
dwStyle |=  LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ;	//添加样式
m_pCtrl->SetExtendedStyle(dwStyle);	//重新设置

需要的样式(根据自己的需要的样式选择)
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
LVS_EX_FULLROWSELECT: 表示选中某行使整行高亮(只适用与report风格的CListCtrl)
LVS_EX_GRIDLINES: 表示显示网格线(只适用与report风格的CListCtrl)

2.添加CListCtrl的记录

//插入列
m_pCtrl->InsertColumn(1,"第一列",LVCFMT_CENTER,47);	//序号,标题,标题显示位置,列宽度
m_pCtrl->InsertColumn(2,"第二列",LVCFMT_CENTER,100);

//写入数据
int nRow = m_list.InsertItem(0, “无用字符串”);	//插入行
m_list.SetItemText(nRow, 1, “1111”);	//设置数据
m_list.SetItemText(nRow, 2, “2222”);	//设置数据

3.判断CListCtrl的哪行记录被选中了

int n = -1;
POSITION pos = m_pCtrl->GetFirstSelectedItemPosition();	//返回第一个选中的行位置
if (pos != NULL)
{
   while (pos)
   {
		n = m_pCtrl->GetNextSelectedItem(pos);	//返回下一个选中的行数(返回值从0开始)
		//做相应操作
   }
}

4.响应单击CListCtrl事件

//响应CMyListView的=NUM_CLICK消息
//直接用VC类向导生成后,不用再次添加声明和消息映射

//添加函数声明
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
//添加消息映射
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)

void CMyListView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if(pNMListView->iItem != -1)
	{
		/*
		CString strtemp;
		strtemp.Format("单击的是第%d行第%d列",
						pNMListView->iItem, pNMListView->iSubItem);
		AfxMessageBox(strtemp);
		*/
		//值从0开始计算,无数据区不相应时间
		//相应操作
	}
	*pResult = 0;
}

5.CListCtrl单击表头排序(不会,待查)

Trackback from your site.

请在这里留言: