适当的TVN_KEYDOWN返回值

Alw*_*uff 5 treeview winapi incremental-search

我最近回答了有关使用节点和复选框创建TreeView的问题.

我正在思考如何treeview在用户按下时检查节点时如何正确处理案例spacebar我遇到了TVN_KEYDOWN通知.

我的解决方案在对话框和窗口过程中进行了测试,两者似乎都完美无缺.

尽管如此,我仍然有一个两难的问题,那就是我的回归结果.以下是文档中的相关摘录TVN_KEYDOWN:

返回值

如果lParam的wVKey成员是字符键代码,则该字符将用作增量搜索的一部分.返回非零以从增量搜索中排除字符,或返回零以在搜索中包含该字符.对于所有其他键,将忽略返回值.

我已经尝试在测试是否spacebar按下并且没有注意到任何差异时返回两个结果.

所以我问你以下问题:

  1. 有人可以解释一下增量搜索是什么吗?

  2. 当我spacebar从增量搜索中包含或排除测试的字符()时有什么区别?

编辑:

似乎我找到了第一个问题的答案.我在维基百科上发现了一篇解释增量搜索的文章.

它只留下了第二个问题需要回答.

编辑结束

谢谢.

最好的祝福.

Han*_*ant 4

它在巨大的 TreeView 中最为明显。最好的例子是 Regedit.exe 的左侧面板。展开 HKCR 并开始输入以查看效果。

不同 Windows 版本的实现方式有所不同,以前在 XP 中的可用性要差很多。这是一个 UI 错误,没有任何好的方法可以让用户看到他输错了字母、纠正输入错误或看到搜索从头开始。当前版本的 Windows 使用超时功能,当您几秒钟内没有按键时,会自动重置部分键入的搜索短语。这几乎是最实用的。它当然有用,只是不太好用。

对 TVN_KEYDOWN 唯一明智的做法就是什么都不做。永远不要添加更多的方法来使其变得比现在更难以预测。当然,如果用户真正想要使用的按键是故意吞下的,那么它的可用性就会大大降低。您当然不想吞掉空格,这当然是树节点文本中的有效字符。如果树碰巧没有任何节点的文本包含空格,那么您仍然不想吞下它,控件本身已经这样做了。

如果通知还传递了收集的增量搜索字符串或提供了重置它的方法,那么它会更有用。事实并非如此,所以那是桥下的水。如果您已经创建了某种可用性陷阱(很难想出一个实际的例子),请考虑处理它。当你看到它时你就知道了。

唯一真正的用处就是完全取代搜索功能。然后,您可以制定自己的规则并自己选择一个节点。当然,总是返回一个非零值。