VC下MFC的CListCtrl的使用与技巧(Use CListCtrl)
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单击表头排序(不会,待查)





