在原来博客中有:MF CListControl 简单功能使用

推荐文章:MFC类CtrlList用法

今天又又一次来介绍点新东西:双击击listcontrol  做出响应。当然你能够做的还有非常多,比方显示点击的行列,右键点击,后面代码都有。没有截图了

主要有

1 插入数据

2 得到listctrl 中全部行的checkbox 的状态 

3 得到listctrl 中全部选中行的序号 

4 对数据做出双击处理与推断

1插入数据显示(參考后面代码)

2双击有数据的区域(參考后面代码)做出响应

3 响应成功提示

部分參考代码

头文件。

#pragma once

#include "afxcmn.h"

#include "afxwin.h"

// cpagebg 对话框

class cpagebg : public CDialogEx

{

DECLARE_DYNAMIC(cpagebg)

public:

cpagebg(CWnd* pParent = NULL); // 标准构造函数

virtual ~cpagebg();

// 对话框数据

enum { IDD = IDD_DIALOGBG };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

DECLARE_MESSAGE_MAP()

public:

CListCtrl m_BgListCtr;

void InitBgList(void);

CEdit m_dzbg1;

afx_msg void OnTimer(UINT_PTR nIDEvent);

afx_msg void OnNMRClickList3(NMHDR *pNMHDR, LRESULT *pResult);

afx_msg void OnBnClickedCheck2();

afx_msg void OnNMDblclkList3(NMHDR *pNMHDR, LRESULT *pResult);

};

cpp文件

// cpagebg.cpp : 实现文件

//

#include "stdafx.h"

#include "103srv.h"

#include "cpagebg.h"

#include "afxdialogex.h"

// cpagebg 对话框

IMPLEMENT_DYNAMIC(cpagebg, CDialogEx)

cpagebg::cpagebg(CWnd* pParent /*=NULL*/)

: CDialogEx(cpagebg::IDD, pParent)

{

}

cpagebg::~cpagebg()

{

}

void cpagebg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_LIST3, m_BgListCtr);

DDX_Control(pDX, IDC_EDIT6, m_dzbg1);

}

BEGIN_MESSAGE_MAP(cpagebg, CDialogEx)

ON_WM_TIMER()

ON_NOTIFY(NM_RCLICK, IDC_LIST3, &cpagebg::OnNMRClickList3)

ON_NOTIFY(NM_DBLCLK, IDC_LIST3, &cpagebg::OnNMDblclkList3)

END_MESSAGE_MAP()

// cpagebg 消息处理程序

void cpagebg::InitBgList(void)

{

DWORD dwStyle = m_BgListCtr.GetExtendedStyle();

dwStyle |= LVS_EX_FULLROWSELECT;// 选中某行使整行高亮(仅仅适用与report 风格的listctrl )

dwStyle |= LVS_EX_GRIDLINES;// 网格线(仅仅适用与report 风格的listctrl )

//dwStyle |= LVS_EX_CHECKBOXES;//item 前生成checkbox 控件

m_BgListCtr.SetExtendedStyle(dwStyle); // 设置扩展风格

dwStyle |= LVS_EX_FULLROWSELECT;// 选中某行使整行高亮(仅仅适用与report 风格的listctrl )

//设置列表控件的报表显示方式

//m_BgListCtr.ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);

//设置列表控件显示网格线

//m_BgListCtr.SetExtendedStyle(LVS_EX_GRIDLINES);

//在列表控件中插入列

m_BgListCtr.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50);

m_BgListCtr.InsertColumn(1, _T("报告"), LVCFMT_LEFT, 100);

m_BgListCtr.InsertColumn(2, _T("时间"), LVCFMT_LEFT, 200);

m_BgListCtr.InsertColumn(3, _T("时间代码"), LVCFMT_LEFT, 100);

m_BgListCtr.InsertColumn(4, _T("參数个数"), LVCFMT_LEFT, 100);

m_BgListCtr.InsertColumn(5, _T("參数值"), LVCFMT_LEFT, 150);

SetTimer(1, 1000, NULL);

SetTimer(2, 2000, NULL);

SetTimer(3, 3000, NULL);

LONG lStyle;

/*m_BgListCtr.InsertItem(0, _T("1"));

m_BgListCtr.InsertItem(1, _T("2"));*/

//for (int n = 0; n < 5; n++)

//{

// CString strColumnHeading = _T("");

// //strColumnHeading.Format(_T("Column %d"), n);

// m_BgListCtr.InsertColumn(n, strColumnHeading, LVCFMT_LEFT, 100);

//}

//在列表控件中插入行

for (int m = 0; m <3 ;m++ )

{

CString strItem = _T("");

strItem.Format(_T(" %d"), m);

m_BgListCtr.InsertItem(m, strItem);

for (int n = 1; n < 2; n++)

{

CString strText = _T("动作报告");

//strText.Format(_T("SubItem %d %d"), m, n);

m_BgListCtr.SetItemText(m, n, strText);

}

}

}

void cpagebg::OnTimer(UINT_PTR nIDEvent)

{

// TODO: 在此加入消息处理程序代码和/或调用默认值

CTime time = CTime::GetCurrentTime();

CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");

//AfxMessageBox(m_strTime);

AfxSetWindowText(m_dzbg1,m_strTime );

switch (nIDEvent)

{

case 1:

for (int m= 0; m<1; m++)

{

for (int n = 2; n < 3; n++)

{

m_BgListCtr.SetItemText(m, n, m_strTime);

}

}

break;

case 2:

for (int m= 1; m< 2; m++)

{

for (int n = 2; n < 3; n++)

{

m_BgListCtr.SetItemText(m, n, m_strTime);

}

}

break;

case 3:

for (int m= 2; m< 3; m++)

{

for (int n = 2; n < 3; n++)

{

m_BgListCtr.SetItemText(m, n, m_strTime);

}

}

break;

}

CDialogEx::OnTimer(nIDEvent);

}

void cpagebg::OnNMRClickList3(NMHDR *pNMHDR, LRESULT *pResult)

{

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);

// TODO: 在此加入控件通知处理程序代码

//AfxMessageBox(_T("1"));

/*DWORD dwPos = GetMessagePos();

CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

m_BgListCtr.ScreenToClient(&point);

LVHITTESTINFO lvinfo;

lvinfo.pt = point;

lvinfo.flags = LVHT_ABOVE;

int nItem = m_BgListCtr.SubItemHitTest(&lvinfo);

if(nItem != -1)

{

CString strtemp;

strtemp.Format(_T(" 单击的是第%d 行第%d 列"), lvinfo.iItem, lvinfo.iSubItem);

AfxMessageBox(strtemp);

} */

DWORD dwPos = GetMessagePos();

CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

m_BgListCtr.ScreenToClient(&point);

LVHITTESTINFO lvinfo;

lvinfo.pt = point;

lvinfo.flags = LVHT_ABOVE;

UINT nFlag;

int nItem = m_BgListCtr.HitTest(point, &nFlag);

// 推断是否点在checkbox 上

/*if(nFlag == LVHT_ONITEMSTATEICON)

{

AfxMessageBox(_T(" 点在listctrl 的checkbox 上"));

} */

*pResult = 0;

}

void cpagebg::OnBnClickedCheck2()

{

// TODO: 在此加入控件通知处理程序代码

}

//双击事件

void cpagebg::OnNMDblclkList3(NMHDR *pNMHDR, LRESULT *pResult)

{

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);

// TODO: 在此加入控件通知处理程序代码

//AfxMessageBox(_T(" 2222"));

// ::MessageBox(NULL,_T("列表为空"),_T("标题"),MB_OK);

DWORD dwPos = GetMessagePos();

CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

m_BgListCtr.ScreenToClient(&point);

LVHITTESTINFO lvinfo;

lvinfo.pt = point;

lvinfo.flags = LVHT_ABOVE;

int nItem = m_BgListCtr.SubItemHitTest(&lvinfo);

if(nItem != -1)//在有数据的显示点击有效

{

/*CString strtemp;

strtemp.Format(_T(" 单击的是第%d 行第%d 列"), lvinfo.iItem, lvinfo.iSubItem);

AfxMessageBox(strtemp); */

if(::MessageBox(m_hWnd,_T("确定产生报告"),_T("确认?"),MB_OKCANCEL) == IDCANCEL)

{

AfxMessageBox(_T(" error"));

}else

{

AfxMessageBox(_T(" sucess"));

}

}

*pResult = 0;

}

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。