适当的TVN_KEYDOWN返回值

时间:2014-03-17 02:14:15

标签: winapi treeview incremental-search

我最近回答了关于Creating TreeView with nodes and checkboxes的问题。

当我在考虑如何在用户按空格键时检查treeview的节点时正确处理案例时,我遇到了TVN_KEYDOWN通知。

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

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

  

返回值

     

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

如果按空格键并且没有发现任何差异,我尝试在测试时返回两个结果。

所以我问你以下问题:

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

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

  3. 编辑:

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

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

    编辑结束

    谢谢。

    最好的问候。

2 个答案:

答案 0 :(得分:4)

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

Windows版本的实现已经发生了变化,过去在XP中的使用情况要差得多。这是一个UI blooper,没有任何好方法让用户看到他输错了一个字母,纠正输入错误或者看到搜索从头开始。当前版本的Windows使用超时,当您没有按键几秒钟时,会自动重置部分键入的搜索短语。这是实际可行的。它当然很有用,但不是很有用。

与TVN_KEYDOWN唯一合理的事情是 nothing 。永远不要添加更多方法,使其比现有的更难预测。如果它是用户真正想要使用的密钥,故意吞下按键当然会使 lot 不太可用。你当然不想吞下一个空格,这当然是树节点文本中的有效字符。如果树碰巧没有任何带有包含空格的文本的节点,那么仍然不想吞下它,控件本身就已经存在了。

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

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

答案 1 :(得分:2)

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

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

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