MFC 中可订制的 ListView 以及 C# 中可编辑的 ListView

这篇博客介绍了如何在MFC中扩展ListView的自定义绘制功能,通过CListCtrlWithCustomDraw类实现了类似C#中ListView的丰富显示效果,包括控制每个单元格的字体、颜色等。同时,展示了C#中的ListViewWithControl,它允许使用诸如TextBox、ListBox和ComboBox等控件来编辑单元格内容。
摘要由CSDN通过智能技术生成

ListView 是一个用途广泛的 control, MFC 里的 listView 很平淡,而C#.net 中则增强了很多,可以在设计时设定各个 cell字体,前景/背景颜色。好在 mfc control 的自控制性更强,可以做到 C# listView 能做到的一切,甚至更多。下面一个 listView class 是很早以前从 codeproject.com 下载(不好意思,忘了作者是谁),稍稍作了一点修改,只要在派生class 中重载那些 virtual functions 就可以控制任何一个 cell Paint 行为,做出各种花哨的 listView.

 

 

#if !defined(AFX_LISTCTRLWITHCUSTOMDRAW_H__AA70C396_EC02_4103_BD7D_3CCEDE0E1C65__INCLUDED_)

#define AFX_LISTCTRLWITHCUSTOMDRAW_H__AA70C396_EC02_4103_BD7D_3CCEDE0E1C65__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

class CListCtrlWithCustomDraw : public CListCtrl

{

public:

                CListCtrlWithCustomDraw();

                void SetGridLines();

                void SetFullRowSelect();

                virtual ~CListCtrlWithCustomDraw();

 

protected:

                CFont* m_pOldItemFont;

                CFont* m_pOldSubItemFont;

                virtual bool IsDraw() { return false; }

                virtual bool OnDraw(CDC* /*pDC*/) { return false; }

                virtual bool IsNotifyItemDraw() { return false; }

                virtual bool IsNotifyPostPaint() { return false; }

                virtual bool IsPostDraw() { return false; }

                virtual bool OnPostDraw(CDC* /*pDC*/) { return false; }

                virtual CFont* FontForItem(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return NULL; }

                virtual COLORREF TextColorForItem(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return CLR_DEFAULT; }

                virtual COLORREF BkColorForItem(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return CLR_DEFAULT; }

                virtual bool IsItemDraw(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool OnItemDraw(CDC* /*pDC*/, int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool IsNotifySubItemDraw(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool IsNotifyItemPostPaint(int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool OnItemPostDraw(CDC* /*pDC*/, int /*nItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual COLORREF TextColorForSubItem(int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return CLR_DEFAULT; }

                virtual COLORREF BkColorForSubItem(int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return CLR_DEFAULT; }

                virtual bool IsSubItemDraw(int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool OnSubItemDraw(CDC* /*pDC*/, int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool IsNotifySubItemPostPaint(int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

                virtual bool IsSubItemPostDraw() { return false; }

                virtual bool OnSubItemPostDraw(CDC* /*pDC*/, int /*nItem*/, int /*nSubItem*/, UINT /*nState*/, LPARAM /*lParam*/) { return false; }

 

protected:

                //{ {AFX_MSG(CListCtrlWithCustomDraw)

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

                //}}AFX_MSG

 

                DECLARE_MESSAGE_MAP()

};

 

#endif // !defined(AFX_LISTCTRLWITHCUSTOMDRAW_H__AA70C396_EC02_4103_BD7D_3CCEDE0E1C65__INCLUDED_)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值