5

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

当我在考虑如何正确处理treeview用户按下时检查节点时的情况时,spacebar我遇到了TVN_KEYDOWN通知。

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

不过,我对返回的结果应该是什么感到两难。以下是文档的相关摘录TVN_KEYDOWN

返回值

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

我尝试在测试是否spacebar按下时返回两个结果,但没有发现任何差异。

所以我问你以下问题:

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

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

编辑:

似乎我已经找到了第一个问题的答案。我在Wikipedia上找到了一篇解释什么是增量搜索的文章。

它只剩下第二个问题需要回答。

编辑结束

谢谢你。

此致。

4

2 回答 2

4

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

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

与 TVN_KEYDOWN 相关的唯一理智的事情是nothing。永远不要添加更多的方法来降低它的可预测性。如果它是用户真正想要使用的键,那么故意吞下一个键当然会降低它的可用性。您当然不想吞下空格,这当然是树节点文本中的有效字符。如果树碰巧没有任何带有包含空格的文本的节点,那么您仍然不想吞下它,控件本身已经这样做了。

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

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

于 2014-03-19T10:39:03.633 回答
2

你只想回答第二个问题,所以这是:

如果从增量搜索中排除空格键,则找不到带有空格键的 trewview 项目。

注意:您必须禁用 TVS_CHECKBOXES 样式,因为 treeview wndproc 处理的空格键与此样式集不同。

于 2014-03-19T06:41:11.723 回答