这是您在许多IRC客户端中看到的功能。基本上,如果你输入一个字符串" Ad"然后点击标签,客户端将填写第一个匹配的缺口(在IRC客户端的情况下)数学'广告' - 所以让我们说它填补了亚当。但是,就像bash一样,如果你继续点击标签,它应该遍历所有包含" Ad"作为前缀。
我不太确定如何在Wndproc中为RichEdit实现这一点。具体来说,当用户点击标签时,我需要获取当前标记'保存,并获取所有前缀并填写第一个标记。如果他再次点击标签我需要获得下一个前缀,依此类推,但是当我得到WM_CHAR 不标签时,我需要清空前缀列表 - 我想? / p>
我想知道是否有一些更容易,更少hacky的方式,或者是否有人看到代码执行此操作?
感谢。
答案 0 :(得分:0)
虽然Remy的评论很有用,但在我看来,这个问题更多的是关于什么逻辑应该实现什么样的bash风格的自动完成比什么都重要。在此基础上,并根据您发布的内容,我发现有点混乱,我认为它应该是这样的(伪代码);
int autocomplete_index = 0;
string autocomplete_prefix;
on_tab:
if (autocomplete_prefix == "")
{
autocomplete_prefix = current_contents_of_edit_field ();
autocomplete_index = 0;
}
auto autocomplete_result = get_autocomplete_string (autocomplete_prefix, autocomplete_index++);
if (autocomplete_result != "")
replace_contents_of_edit_field_and_move_caret_to_end (autocomplete_result);
else
beep (); // or cycle round
done;
on_any_other_char:
autocomplete_prefix = "";
如果在对话框中嵌入了富编辑控件,则还需要确保对话管理器在您执行操作之前不会说话并且VK_TAB
。对于丰富的编辑控件通常不会发生这种情况(虽然它适用于常规编辑控件 - 如图所示),但如果确实如此,您可以在WndProc中正确处理WM_GETDLGCODE
(详情请求)。
而且'hacky'?为什么?我不这么认为。听起来对我来说是一个好主意。