zoukankan      html  css  js  c++  java
  • MFC ListControl使用方法

    在原来博客中有: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<LPNMITEMACTIVATE>(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<LPNMITEMACTIVATE>(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;
    }
    


  • 相关阅读:
    python笔记
    React+router和react+redux使用过程的记录
    jQuery源码分析随笔
    安装nodejs+ionic+cordova环境心得
    win10系统Nodejs安装包总是失败原因
    silverlight中dialogresult和close
    安卓HTTP访问的两种方式
    安卓Activity跳转的几种方式
    Android开发Content Provider
    web.xml中filter的用法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5347618.html
Copyright © 2011-2022 走看看