本文简单介绍下VC列表控件的点击事件。
新建对话框应用程序,并且添加List列表控件。
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; };
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); }
源码下载