完美自绘制CListCtrl控件2[MFC]

上篇自绘了CListCtrl,做得大体上差不多了,但是CHeaderCtrl没有绘制,右边非column部分也没将网格线顶到头,实在是一个小遗憾

这里一并将CHeaderCtrl绘制了而且斑马线也画到最右边,

使用这个listctrl的时候只需这样子设置,就可以获得很好的效果:

DWORD dwExtentStyle = m_list.GetExtendedStyle(); m_list.SetExtendedStyle(dwExtentStyle|LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER); 

 

效果图:

 

代码上传到资源里,地址:https://download.csdn.net/download/hurryboylqs/2668669,在这个例子里我还采用了虚拟列表的方式显示数据,效果非常好。

接下来我们还有一些地方可以修改,比如列表的排序,象任务管理器一样可以按某个字符查找等这些功能,读者可以自行实现。

 

 

 

 

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
MFC ListControl控件可以通过自绘来实现Checkbox的绘制。下面是自绘Checkbox的步骤: 1. 创建一个自定义的CListCtrl类,并在其中添加WM_PAINT消息的响应函数。 2. 在WM_PAINT消息的响应函数中,获取每个Item的位置和状态。 3. 通过函数GetClientRect()获取ListControl的客户区域,然后通过函数GetItemRect()获取每个Item的位置信息。 4. 根据Item的位置信息,使用自定义的绘制函数绘制Checkbox。 5. 根据Item的状态,使用自定义的绘制函数绘制Checkbox的选中状态。 6. 重绘完成后,调用父类的默认处理函数。 下面是一个示例代码,演示了如何使用自绘Checkbox的方式绘制MFC ListControl控件的内容: ```cpp class CMyListCtrl : public CListCtrl { public: afx_msg void OnPaint() { CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap bmp; bmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); CBitmap* oldBmp = memDC.SelectObject(&bmp); memDC.FillSolidRect(&rect, RGB(255, 255, 255)); // 设置背景色 CListCtrl::DefWindowProc(WM_PAINT, (WPARAM)memDC.GetSafeHdc(), 0); for(int i = 0; i < GetItemCount(); i++) { // 获取每个Item的位置和状态 CRect itemRect; GetItemRect(i, &itemRect, LVIR_BOUNDS); bool bChecked = GetCheck(i); // 绘制Checkbox DrawCheckbox(&memDC, itemRect, bChecked); } dc.BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); memDC.SelectObject(oldBmp); } void DrawCheckbox(CDC* pDC, CRect rect, bool bChecked) { // 自定义Checkbox的绘制过程,根据需要进行绘制 // 使用pDC的函数来进行绘制,例如Rectangle()、FillRect()、LineTo()等 } DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl) ON_WM_PAINT() END_MESSAGE_MAP() ``` 在使用ListControl时,使用该自定义的CMyListCtrl类即可实现Checkbox的自绘

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值