Advertisement

CMyList ListCtrl的Redraw

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:RAR


简介:
在Windows编程中,CListCtrl是一个ubiquitous控件,普遍用于以列表形式展示数据。它存在于MFC库支持的组件集合中,在此框架下提供了丰富功能:包括表头、单行或批量显示内容以及加载图标等信息。然而,有时候我们需要对它的外观进行自定义调整,例如改变字体颜色、大小和背景色,并且可以插入图片。这就需要用到(Custom Draw)机制。本文将详细讲解如何利用OnNMCustomdraw消息与CListCtrl组件实现自定义重绘功能。熟悉`OnNMCustomdraw$::=CListCtrl$`这一通知机制。它属于CListCtrl类的通知消息,其主要功能是提供自定义渲染的可能性。当需要进行绘图操作时,此通知会在网络传输至父窗口后触发。在此情境下,我们能够捕获该通知并将其响应函数用于处理绘制相关的逻辑细节。为了接收到`OnNMCustomdraw`消息并执行相应操作,请在该类的`OnNMCustomdraw`成员函数处进行覆盖。```cpp void CMyList::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast(pNMHDR); 检查绘制阶段 switch (pLVCD->nmcd.dwDrawStage) { case CDDS_PREPAINT: 请求整个列表项的绘制 *pResult = CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: 处理每个列表项的绘制 CustomDrawItem(pLVCD); *pResult = CDRF_NEWFONT; 如果有更改,返回此标志 break; 其他阶段可以按需处理 ... } } ```在`CustomDrawItem`函数内,你可根据具体需求调整列表项的外观样式:如需进一步定制,可对字体的颜色、大小等属性进行设置:```cpp void CMyList::CustomDrawItem(NMLVCUSTOMDRAW* pLVCD) { CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc); CFont* pOldFont = pDC->SelectObject(&m_CustomFont); 使用自定义字体 设置文本颜色 pDC->SetTextColor(RGB(255, 0, 0)); 红色 绘制文本 pDC->DrawText(pLVCD->pszText, -1, &pLVCD->rc, DT_LEFT | DT_VCENTER); 恢复原字体 pDC->SelectObject(pOldFont); } ```在常规操作中,加载图片时通常会采用以下方法:使用`SetItemState`命令设置列表项的状态,并通过指定参数如`LVSIL_NORMAL`或`LVSIL_STATE`来确定显示的图像类型。具体而言,在实际应用中可能会遇到不同的需求场景。```cpp int imageIndex = ...; 图片索引 int itemIndex = ...; 列表项索引 设置状态以显示图像 ListView_SetItemState(m_ListCtrl, itemIndex, LVIS_STATEIMAGEMASK | (imageIndex << 12), LVIS_STATEIMAGEMASK); 确保图像列表已经添加到ListCtrl m_ListCtrl.SetImageList(&m_ImgList, LVSIL_NORMAL); ````LVCustomDraw`项目中的代码或许包含了这样一个案例,具体说明了如何实现上述功能。深入研究并解析这些代码实例后,你可以更好地掌握`CListCtrl`对象进行自定义绘图的技术。CListCtrl 的自定义绘图功能具有强大能力。这一特性赋予了开发人员打造独特界面的能力,并显著提升了用户使用体验。借助对`OnNMCustomdraw`消息的处理机制,开发者能够精细掌控每一个列表项目的视觉呈现方式。具体表现为字体样式、颜色搭配、背景装饰和图标的使用等方面,并最终生成更具吸引力且内容丰富的界面布局。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • MFC ListCtrl 控件
    优质
    简介:MFC ListCtrl 是 Microsoft Foundation Classes 库中的一个控件,用于在 Windows 应用程序中显示列表和图标视图,支持多种查看模式及自定义列设置。 继承listctrl report 类似Excel表格的控件可以任意更改单元格的颜色以及调整行高。这种实现方式提供了更灵活的数据展示选项,让用户可以根据需要自定义界面样式。
  • VC ListCtrl增强扩展类
    优质
    本段介绍VC ListCtrl的增强扩展类,包含自定义排序、过滤及多列支持等功能,旨在提升MFC应用程序的数据展示和管理能力。 VC ListCtrl强大扩展类 包含每行自定义背景色、文字颜色、单独图标以及复选框等功能。
  • ListCtrl四种显示样式
    优质
    本文介绍了ListCtrl控件的四种不同显示方式及其特点和应用场景,帮助用户选择合适的视图模式。 ListCtrl 显示有四种样式:图标、小图标和报表等。
  • MFC中ListBox与ListCtrl应用
    优质
    本文章详细探讨了在Microsoft Foundation Classes (MFC)框架下如何有效运用ListBox和ListCtrl两种控件。通过实例解析其操作方法及应用场景,帮助开发者更好地理解和使用这两种重要的界面元素。 在Microsoft Foundation Classes (MFC)库中,ListBox和ListCtrl是两种常见的控件,用于用户界面中的列表数据展示与管理。其中,ListBox通常适用于简单的单选或多选场景;而功能更为丰富的ListCtrl支持多列显示、图标以及自定义格式等特性。 **ListBox控件** MFC中的CListBox类提供了基础的UI元素——ListBox,允许用户滚动浏览并选择项目。根据需求的不同,它可以是简单列表或允许多项同时被选取的类型。在使用时,通常会在对话框资源编辑器中添加一个ListBox,并通过DoDataExchange()函数映射控件ID。 1. **创建ListBox** 一般情况下,在对话框资源里插入一个ListBox元素,并于CDialog派生类内进行相应的初始化和数据交换操作。 2. **项的增删** CListBox提供了AddString(), InsertString(), DeleteString()等方法,分别用于向列表中添加、插入及删除项目。 3. **获取选中的项目** 利用GetCurSel()可以得到当前被选取项目的索引值;对于多选项选择,则可以通过GetSelItems()来获得所有已选定的项。 4. **消息处理** MFC下的CListBox类支持多种消息映射函数,例如ON_LBN_SELCHANGE,在用户改变所选项目时触发。 **ListCtrl控件** 作为MFC中更为复杂的组件之一,继承自CListCtrl的ListCtrl能够展示多列数据,并且可以设置图标和定制化的列表头。它具有两种视图模式:报告视图(LV_REPORT)与图标视图(LV_ICON)。 1. **创建ListCtrl** 通过对话框资源添加一个ListCtrl控件,然后在CDialog的派生类中进行初始化并配置其ID和初始设置。 2. **插入列标题** 使用InsertColumn()函数来增加新的列,并且可以指定每列的名字、宽度及其他属性。 3. **项目增删** InsertItem(), SetItemText(), DeleteItem()等方法分别用于添加新项,修改现有项的文本以及从列表中移除特定索引位置上的条目。 4. **数据操作与获取** ListCtrl允许为每个项目关联自定义的数据值。使用SetItemData()和GetItemData()函数来设置或检索这些数值。 5. **图像列表管理** SetImageList()可以用来设定一个包含多个图标的列表,从而为每一项分配图标。 6. **多选与排序功能** ListCtrl支持启用多选择模式,并可通过自定义的比较算法实现项目的重新排序。例如通过SetExtendedStyle()函数开启额外的功能选项。 7. **消息处理机制** 用于ListCtrl的消息映射比ListBox更复杂,包括ON_NOTIFY、ON_LV_ITEMCHANGED等,分别响应NM_CLICK通知和其他状态变化事件。 **示例代码** 演示如何在MFC应用程序中使用CListBox和CListCtrl控件的示例代码通常会展示初始化步骤及操作方法。这可能涉及到添加项目到列表中,处理用户的选择行为以及配置不同的样式选项。 总结而言,理解并掌握ListBox与ListCtrl的应用将有助于开发出具有更丰富功能特性的Windows应用程序。
  • ListCtrl自动换行.docx
    优质
    本文档介绍了如何在编程中实现ListCtrl控件中的自动换行功能,适用于需要展示长文本数据并希望保持界面整洁的开发者。 可以支持listrctrl自动换行。有两种思路:一种是自己重新编写类;另一种是添加一个函数。需要使用的朋友可以下载相关资源。
  • 完美修改ListCtrl控件
    优质
    本文章详细介绍了如何对ListCtrl控件进行自定义和优化,涵盖从基础设置到高级功能的各种技巧。适用于希望改进界面交互体验的开发者。 这是我经过研究和借鉴后修改的关于ListCtrl控件的代码。该代码可以实现对ListCtrl控件某行、某列背景色及文本字体颜色大小进行调整,并支持单击事件以更新内容。这很好地补充了VC++中ListCtrl功能上的不足,希望能给大家的编程工作带来帮助。
  • WXPython控件详解之ListCtrl
    优质
    本文章详细介绍了如何使用WXPython中的ListCtrl控件进行列表显示与操作,包括创建、配置和事件处理等内容。适合初学者学习掌握。 本段落详细总结了在wxPython中使用ListCtrl方法的相关内容。
  • ListCtrl选定单元格.rar
    优质
    本资源为一个关于如何在ListCtrl中实现选定单元格功能的示例程序,包含详细的代码和说明文档,适用于Windows平台下的MFC应用程序开发。 CCtrlList控件可以实现单个单元格的选中功能,并且可以在整行选中与单元格选中的模式之间进行切换。此外,用户可以通过点击来控制网格线是否显示。不过个人认为MFC真是垃圾,这么一个小小的功能都需要通过重载控件才能完成,完全不如其他语言方便。如果不是公司要求使用的话,谁会愿意学习这种东西呢?