【问题标题】:Turning off auto-complete for ComboBox关闭 ComboBox 的自动完成功能
【发布时间】:2013-08-20 09:57:09
【问题描述】:

标准的 Windows/MFC 组合框(下拉模式)具有自动完成功能,我想关闭它,但不知道如何关闭。

示例 1:使用列表值“Abc”和“Def”创建一个 ComboBox。输入“A”作为编辑值并使用下拉按钮。 “A”将更改为“Abc”。

示例 2:相同的起始值。打开下拉菜单,输入“A”作为编辑值,然后按 TAB。 “A”将更改为“Abc”。

这些示例甚至可以在 Visual Studio IDE 对话框编辑器测试模式下工作。无需编译的 exe。

从“A”更改为“Abc”可能是一项功能,但客户并不想要它。有什么办法可以预防吗?

【问题讨论】:

  • 解决了它或多或少我写我自己几乎像一个组合框...

标签: winapi autocomplete ccombobox


【解决方案1】:

您可以通过调用SHAutoComplete 来微调任何编辑控件的自动完成行为。要获得 ComboBox 的 Edit 控件部分的句柄,请向 ComboBox 控件发送 CBEM_GETEDITCONTROL 消息。

要删除不需要的功能,SHAutoComplete 的标志不得包含 SHACF_USETAB

【讨论】:

  • 谢谢,听起来不错,但似乎不起作用。我刚刚使用 SHACF_AUTOAPPEND_FORCE_OFF|SHACF_AUTOSUGGEST_FORCE_OFF 对对话框、组合框和组合框编辑控件进行了测试。全部返回 S_OK,但问题依然存在。
  • 对于这两个标志,文档要求以下内容:"此标志必须与一个或多个 SHACF_FILESYS* 或 SHACF_URL* 结合使用标志。”
  • 哎呀,你当然是对的。尝试使用 SHACF_AUTOAPPEND_FORCE_OFF|SHACF_AUTOSUGGEST_FORCE_OFF|SHACF_FILESYSTEM|SHACF_URLALL。再次全部返回 S_OK,但问题仍然存在。
  • 只使用了 SHACF_DEFAULT 只是为了它,这产生了一个有趣的效果:我能够使用我的组合框自动完成 URL 和路径。所以我的电话适用于正确的 HWND。我认为此功能仅用于配置 URL/路径自动完成,而不是用于使用下拉数据自动完成...
  • @user 看来你是对的,SHAutoComplete 确实只适用于文件/文件夹/shell 命名空间。要禁用自动完成,您似乎必须创建一个IAutoComplete COM 对象并实现一个简单的IEnumString 源,它不会返回任何内容。您可能还需要通过调用IAutoComplete2::SetOptions 来调整行为。由于 ATL 是出了名的记录不足和功能过多,如果它已经具备所有要素并准备好拼凑起来,我不会感到惊讶。
猜你喜欢
  • 2011-10-23
  • 2020-01-29
  • 2016-09-26
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多