您的位置:首页 > 其它

可编辑的 ListCtrl 封装整合

2015-10-18 15:29 495 查看
网上下了一个源码,但是封装不太好,太多代码在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: