【问题标题】:CListCtrl search by typing: how to show what's been typed?CListCtrl 通过键入搜索:如何显示已键入的内容?
【发布时间】:2020-07-08 08:13:48
【问题描述】:

我在报告视图中有一个CListCtrl,我注意到我可以通过键入项目的前几个字母来进行搜索(控件在我键入时选择匹配的第一个项目),并且此搜索“重置”大约一秒钟后(所以如果我输入了“abc”,暂停,然后输入“d”,然后它只搜索“d”)。为了可用性,我希望用户意识到这种按输入搜索的功能是存在的。

以下是我能想到的选项,按优先顺序排列,以及我在每种情况下的问题:

  1. 使用 MFC 中现有的任何内置支持。

    • 有这种事吗?
  2. 之前已经实施的一些其他解决方案。

    • 再说一遍,有这种事吗?
  3. 在对话框中添加另一个文本框,并处理其ON_EN_CHANGE 消息以某种方式触发CListCtrl 的搜索行为。换句话说,类似于浏览器中的查找对话框/工具栏。

    • 如何触发搜索行为?

【问题讨论】:

    标签: visual-studio-2017 mfc clistctrl


    【解决方案1】:

    确实查看了 Microsoft Docs 上的列表视图控件文档。 此行为在Default List-View Message ProcessingWM_CHAR 消息)中进行了描述。搜索字符串确实在一秒钟后重置。

    但是,我没有找到任何似乎是相对的通知消息,例如返回当前搜索字符串,您可以显示这些消息。有 LVN_INCREMENTALSEARCH,但文档相当混乱(例如,什么是“增量搜索”?等),我不知道您是否会收到这个,因为这似乎是关于虚拟列表视图控件.不管怎样,你可以试一试。

    但是在短短 1 秒内重置用户输入的测试可能对用户或审阅者来说是不受欢迎的(实际上我从未见过应用程序这样做)。所以你可以在你的对话框中实现一些“搜索”操作,就像你说的添加一个编辑框并搜索它的内容。您可以使用LVM_FINDITEM message(或ListView_FindItem() 宏)请求部分匹配搜索(LVFI_PARTIAL),或者自己进行搜索(找到匹配的项目并移动到那里)。

    【讨论】:

    • 感谢您找到这些详细信息 - 我不知道为什么我没有在文档中注意到这些。我对 LVN_INCREMENTALSEARCH 进行了一些试验,它仅在按键触发增量搜索时触发 - 而不是在 1 秒超时清除搜索字符串时触发。在我看来,微软并没有真正打算让这种搜索功能过于定制化。也许我确实需要实现自己的搜索。
    • 仅供参考:增量搜索似乎是这种搜索功能风格的常用术语:en.wikipedia.org/wiki/Incremental_search
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多