zoukankan      html  css  js  c++  java
  • 可编辑的 ListCtrl 封装整合

    网上下了一个源码,但是封装不太好,太多代码在dialog中,重新整合了一下


    1.代码目录梳理


    $(ProjectDir)/EditListCtrl

    ----inc,头文件

    ----src,源文件


    2.继承CEditListCtrl :CListCtrl,复写PreSubClassWindow,并利用反射,添加其单击及双击响应消息,使这段代码与dialog脱离,完善封装

    $(ProjectDir)/EditListCtrl/inc//EditListCtrl.h

    #include "ListCtrlDateEdit.h"
    #include "ListCtrlEdit.h"
    #include "ListCtrlComboBox.H"
    #include "ListCtrlMaskEdit.H"
    #include "ListCtrlCurrencyEdit.H"
    
    class CEditListCtrl : public CListCtrl
    {
    public:
    	DECLARE_MESSAGE_MAP()
    	void PreSubclassWindow();
    	void OnClickList(NMHDR* pNMHDR, LRESULT* pResult);
    	void OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult);
    public:
    	CListCtrlCurrencyEdit m_ListCurrencyEdit;
    	CListCtrlMaskEdit m_ListMaskEdit;
    	CListCtrlDateEdit m_ListDateEdit;
    	CListCtrlEdit m_ListEdit;
    	CListCtrlComboBox m_ListComboBox;
    };

    $(ProjectDir)/EditListCtrl/inc//EditListCtrl.cpp

    #include "StdAfx.h"
    #include "EditListCtrl.h"
    
    BEGIN_MESSAGE_MAP(CEditListCtrl, CListCtrl)
    	ON_NOTIFY_REFLECT(NM_CLICK, OnClickList)
    	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclkList)
    END_MESSAGE_MAP()
    
    void CEditListCtrl::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	CListCtrlEditBase::OnOpen(this, pNMHDR);
    	*pResult = 0;
    }
    
    void CEditListCtrl::OnClickList( NMHDR* pNMHDR, LRESULT* pResult )
    {
    	int nItem, nSubItem;
    	if (CListCtrlEditBase::HitTestEx(this, pNMHDR, nItem, nSubItem) &&
    		nSubItem == 4)
    	{
    		m_ListComboBox.ShowEdit(nItem, nSubItem);
    	}
    	*pResult = 0;
    }
    
    void CEditListCtrl::PreSubclassWindow()
    {
    	ModifyStyle(0 , LVS_REPORT);
    	SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    
    	CImageList imagelist; 
    	int itemheight = 18;
    	imagelist.Create(1, itemheight, ILC_COLOR4, 10, 10);   
    	SetImageList(&imagelist, LVSIL_SMALL); 
    }


    代码下载:含一个工程和示例主程序

    http://download.csdn.net/detail/silyvin/9191243

  • 相关阅读:
    leetcode 850. Rectangle Area II
    leetcode 699. Falling Squares 线段树的实现
    leetcode 847. Shortest Path Visiting All Nodes 无向连通图遍历最短路径
    leetcode 843. Guess the Word
    javaMail实现收发邮件(三)
    javaMail实现收发邮件(二)
    javaMail实现收发邮件(一)
    springboot整合websocket实现一对一消息推送和广播消息推送
    jieba分词/jieba-analysis(java版)
    java实现两个不同list对象合并后并排序
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106866.html
Copyright © 2011-2022 走看看