Mfc 如何使用CListCtrl和CHeaderCtrl添加数据筛选

Mfc 如何使用CListCtrl和CHeaderCtrl添加数据筛选,mfc,filtering,clistctrl,Mfc,Filtering,Clistctrl,背景: 操作数据集合的应用程序通常使用包含标头的网格显示。这些应用程序通常包含一个过滤器,允许用户缩小数据集(Excel是一个很好的例子,还有很多其他的例子)。 在我的MFC应用程序中,我尝试使用CListCtrl和CHeaderCtrl组合来执行相同的操作。这种组合已经使我的应用程序能够提供多列排序,包括使用单个标题项的图像功能来表示升序/降序排序顺序 我用我最好的Google fu找到了CHeaderCtrl扩展/自定义的任何示例,其中包括自定义图形,以说明添加的过滤器按钮,并在单击时显示相

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

我用我最好的Google fu找到了CHeaderCtrl扩展/自定义的任何示例,其中包括自定义图形,以说明添加的过滤器按钮,并在单击时显示相关的下拉菜单,供用户输入过滤器标准

问题:

  • 有我错过的例子吗
  • 如果没有可用的例子,在定制CclitCtRL和CeaDeCtRL来实现我的目标时,我应该考虑什么样的方法?< /LI> 其他评论:
    其中一个答案提到了内置过滤器功能。是的,我见过,但这不是我想要的。我希望专门模拟Excel和其他启用过滤功能的应用程序的非静态、非可视侵入性过滤功能。

    您在寻找什么


    因为它是用其他语言写的,所以我已经给出了地址。参考第二个结果。

    我的Google fu证实了你的结论,没有任何示例向
    CListCtrl
    添加非侵入性过滤界面,无论是否使用
    CHeaderCtrl

    简单方法
    HDN\u项目中,单击
    处理程序,检查
    ((NMHEADER)lParam).iButton
    。对于
    iButton==1
    ,这是鼠标右键。这是您展示一个小的
    CWnd
    -dervied过滤器用户界面的机会。这种方法的问题在于,并没有直观的迹象表明右键单击将显示一个过滤器菜单

    更复杂
    创建三列标题图像-过滤器图标、向上箭头+过滤器图标、向下箭头+过滤器图标。如果未对列进行排序,则仅显示过滤器图像,否则使用适当的箭头+过滤器图像。点击
    NM\RCLICK
    级别上的
    CListCtrl
    ,获得坐标信息(.)做一些几何图形以确定点击是否在过滤器图标上,如果是,则显示一点
    CWnd
    -衍生过滤器界面。您甚至可以在标题工具提示中显示当前过滤器,创建更多带有彩色过滤器的图像,以便在过滤器处于活动状态时显示