背景:
操作通常使用包含标题的网格呈现的数据集合的应用程序。这些相同的应用程序通常包含一个过滤器,允许用户缩小数据集(Excel是一个很好的例子。还有很多其他的)。
在我的MFC应用程序中,我试图使用CListCtrl和CHeaderCtrl组合来做同样的事情。这种组合已经使我的应用程序能够提供多列排序,包括使用各个标题项的图像功能来表示升序/降序排序。
我已经使用我最好的Google-fu来查找CHeaderCtrl被扩展/自定义的任何示例,以包括自定义绘图以考虑添加过滤器按钮,并在单击时显示用户输入过滤条件的相关下拉菜单。
问题:
其他评论:
其中一个答案引用了内置的FilterBar功能。是的我已经看过了,但这不是我想要的。我希望专门模拟Excel和其他支持过滤器的应用程序的非静态,非视觉侵入式过滤功能。
答案 0 :(得分:1)
我的Google-fu确认了您的身份,没有为CListCtrl
添加非侵入性过滤器界面的示例,无论是否有CHeaderCtrl
。
简单方法
在HDN_ITEMCLICK
处理程序中,查看((NMHEADER)lParam).iButton
。对于iButton == 1
,这是鼠标右键。这是您展示一个CWnd
- 过滤器UI的机会。这种方法的问题在于没有可视指示右键单击将显示过滤器菜单。
更复杂
创建三个列标题图像 - 过滤器图标,向上箭头+过滤器图标,向下箭头+过滤器图标。如果未在列上排序,则显示仅过滤器图像,否则使用相应的箭头+过滤器图像。处理CListCtrl
级别的NM_RCLICK
,以获取坐标信息(example。)执行某些几何图形以确定点击是否在您的过滤器图标上,如果是,则显示小CWnd
- 派生过滤器UI。你可以变得更加漂亮,并在标题工具提示中显示当前过滤器,使用彩色过滤器创建更多图像,以显示过滤器何时处于活动状态。
答案 1 :(得分:0)