VC之列表控件点击事件处理

本文简单介绍下VC列表控件的点击事件。


1.新建对话框应用程序

新建对话框应用程序,并且添加List列表控件。

VC之列表控件点击事件处理_第1张图片


2.设置相关变量和函数

class CListClickDlg : public CDialog
{
// Construction
public:
	CListClickDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CListClickDlg)
	enum { IDD = IDD_LISTCLICK_DIALOG };
	CListCtrl	m_list;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CListClickDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CListClickDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnClickList1(NMHDR* pNMHDR, LRESULT* pResult);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	void SetListInit();
	int m_nSelectedItem;
	int m_nSelectedSubItem;
};


3.添加列表点击事件

初始化变量
	SetListInit();
	m_nSelectedItem = -1;
	m_nSelectedSubItem = -1;

设置属性
void CListClickDlg::SetListInit()
{
	//属性设置
	m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT&LVS_TYPEMASK|LVS_SINGLESEL);
	DWORD dwStyle = m_list.GetExtendedStyle();
	m_list.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	
	//设置行宽
	CImageList image;
	image.Create(1,30,ILC_COLOR24|ILC_MASK,4,0);
	m_list.SetImageList(&image,LVSIL_SMALL);
	
	//设置字体和大小
	CFont font;
	font.CreateFont(16,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"宋体");
	m_list.SetFont(&font);
	m_list.GetHeaderCtrl()->SetFont(&font);
	
	//设置标题头
	m_list.InsertColumn(0,"序号",LVCFMT_LEFT,80,0);
	m_list.InsertColumn(1,"姓名",LVCFMT_LEFT,120,0);
	m_list.InsertColumn(2,"年龄",LVCFMT_LEFT,80,0);
	
	//设置内容
	m_list.InsertItem(0,"001");
	m_list.SetItemText(0,1,"小明");
	m_list.SetItemText(0,2,"18");
	
	m_list.InsertItem(1,"002");
	m_list.SetItemText(1,1,"小红");
	m_list.SetItemText(1,2,"17");
	
	m_list.InsertItem(2,"003");
	m_list.SetItemText(2,1,"小华");
	m_list.SetItemText(2,2,"19");
}

点击事件
void CListClickDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	CPoint CursorPoint;
	if (!GetCursorPos(&CursorPoint))
	{
		return;
	}

	if (-1 == pNMListView->iItem)
	{
		m_nSelectedItem = -1;
	}
	else
	{
		m_nSelectedItem = pNMListView->iItem;
	}

	if (-1 == pNMListView->iSubItem)
	{
		m_nSelectedSubItem = -1;
	}
	else
	{
		m_nSelectedSubItem = pNMListView->iSubItem;
	}

	CString str = "";
	if (-1 == m_nSelectedItem)
	{
		str = "没有选中";
	}
	else
	{
		str.Format("当前点击位置<行数:%d,列数:%d>",m_nSelectedItem+1,m_nSelectedSubItem+1);
	}
	MessageBox(str);

	*pResult = 0;
}

void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	LVHITTESTINFO ht;
	ht.pt = point;
	ht.flags = LVHT_ONITEM;
	int rval = SubItemHitTest(&ht);
	if (rval == -1)
	{
		CListCtrl::OnLButtonDown(nFlags, point);
		return;
	}

	int nItem = ht.iItem;
	int nSubItem = ht.iSubItem;
	
	m_nSelectedSubItem = nSubItem;
	m_nSelectedItem = nItem;
	Invalidate();

	CListCtrl::OnLButtonDown(nFlags, point);
}

4.查看效果

运行后
VC之列表控件点击事件处理_第2张图片

单击

VC之列表控件点击事件处理_第3张图片


源码下载


你可能感兴趣的:(VC,点击事件,列表控件)