2

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

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

问题

  1. 有没有我错过的例子?
  2. 如果互联网上没有可用的示例,在自定义 CListCtrl 和 CHeaderCtrl 时我应该考虑什么方法来实现我的目标?

附加评论:
其中一个答案引用了内置的 FilterBar 功能。是的,我已经看到了,但这不是我要找的。我正在寻找专门模拟 Excel 和其他启用过滤器的应用程序的非静态、非视觉侵入过滤功能。

4

2 回答 2

1

我的 Google-fu 确认您的,没有添加非侵入式过滤器界面的示例CListCtrl,有或没有CHeaderCtrl.

简单方法
在您的HDN_ITEMCLICK处理程序中,检查((NMHEADER)lParam).iButton. 对于iButton == 1,那是鼠标右键。这是您展示一点CWnd衍生过滤器 UI 的机会。这种方法的问题是没有视觉指示右键单击会弹出过滤器菜单。

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

于 2009-02-14T17:19:39.417 回答
0

这是要找的吗?

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

于 2009-02-14T14:05:00.320 回答