1、自己创建一个类继承CListCtrl类,如下
CMyListCtrl.h文件内容
class CMyListCtrl:
public CListCtrl
{
public:
CMyListCtrl();
virtual ~CMyListCtrl();
protected:
afx_msg void OnSize(UINT nType, int cx, int cy);
//接受响应消息
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchanged(NMHDR* pNMHDR, LRESULT* pResult);
private:
int m_iPreRow; //记录上一次选择的行号,用于实现单行选择
};
CMyListCtrl.cpp文件内容
CMyListCtrl::CMyListCtrl()
{
m_iPreRow = -1;
}
CMyListCtrl::~CMyListCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_WM_SIZE()
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, &CMyListCtrl::OnLvnItemchanged)
END_MESSAGE_MAP()
void CMyListCtrl::OnSize(UINT nType, int cx, int cy)
{
CListCtrl::OnSize(nType, cx, cy);
ShowScrollBar(SB_HORZ, FALSE);
}
void CMyListCtrl::OnLvnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int iRow = pNMListView->iItem;//每一行的item从零开始,双击选中行
if (-1 == m_iPreRow)
{
m_iPreRow = iRow;
}
else
{
if (m_iPreRow != iRow)
{
SetItemState(m_iPreRow, 0, -1); //用于实现单行选择
m_iPreRow = iRow;
}
}
}
2、通过属性窗口设置
3、通过设置窗口样式实现
LONG lStyle;
m_listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
lStyle = GetWindowLong(m_listCtrl.m_hWnd, GWL_STYLE); // 获取当前窗口style
lStyle &= ~LVS_TYPEMASK; // 清除显示方式位
lStyle |= LVS_REPORT; // 设置style
SetWindowLong(m_listCtrl.m_hWnd, GWL_STYLE, lStyle); // 设置style