如何使用CListCtrl和CHeaderCtrl添加数据过滤

时间:2009-02-14 13:55:21

标签: mfc filtering clistctrl

背景
操作通常使用包含标题的网格呈现的数据集合的应用程序。这些相同的应用程序通常包含一个过滤器,允许用户缩小数据集(Excel是一个很好的例子。还有很多其他的)。 在我的MFC应用程序中,我试图使用CListCtrl和CHeaderCtrl组合来做同样的事情。这种组合已经使我的应用程序能够提供多列排序,包括使用各个标题项的图像功能来表示升序/降序排序。

我已经使用我最好的Google-fu来查找CHeaderCtrl被扩展/自定义的任何示例,以包括自定义绘图以考虑添加过滤器按钮,并在单击时显示用户输入过滤条件的相关下拉菜单。

问题

  1. 我错过了哪些例子?
  2. 如果没有可通过互联网获得的示例,我应该在定制CListCtrl和CHeaderCtrl时考虑采用哪种方法来实现我的目标?
  3. 其他评论:
    其中一个答案引用了内置的FilterBar功能。是的我已经看过了,但这不是我想要的。我希望专门模拟Excel和其他支持过滤器的应用程序的非静态,​​非视觉侵入式过滤功能。

2 个答案:

答案 0 :(得分:1)

我的Google-fu确认了您的身份,没有为CListCtrl添加非侵入性过滤器界面的示例,无论是否有CHeaderCtrl

简单方法
HDN_ITEMCLICK处理程序中,查看((NMHEADER)lParam).iButton。对于iButton == 1,这是鼠标右键。这是您展示一个CWnd - 过滤器UI的机会。这种方法的问题在于没有可视指示右键单击将显示过滤器菜单。

更复杂
创建三个列标题图像 - 过滤器图标,向上箭头+过滤器图标,向下箭头+过滤器图标。如果未在列上排序,则显示仅过滤器图像,否则使用相应的箭头+过滤器图像。处理CListCtrl级别的NM_RCLICK,以获取坐标信息(example。)执行某些几何图形以确定点击是否在您的过滤器图标上,如果是,则显示小CWnd - 派生过滤器UI。你可以变得更加漂亮,并在标题工具提示中显示当前过滤器,使用彩色过滤器创建更多图像,以显示过滤器何时处于活动状态。

答案 1 :(得分:0)

您正在寻找this吗?

由于它是其他语言,我已经给出了googled地址。参考第二个结果。