首页 > 解决方案 > 在 MFC 组合框中设置文本而不将其添加到列表中

问题描述

我有一个 MFC 组合框,特别是从 派生的类型CComboBox,创建为下拉列表框,无法编辑所选条目,即可选项目的简单列表。

确实支持不选择任何项目的可能性。我知道我可以调用SetCurSel(-1)并且组合框的编辑字段将为空,直到用户从下拉列表中选择“正确”项目。但我实际上更喜欢显示某种默认文本,而不仅仅是一个空字段。所以我需要做的是设置编辑字段的文本,而不将该文本添加到项目列表或使项目 user-editable

我尝试SetWindowText了组合框,但没有成功。根据评论建议,我还尝试使用GetComboBoxInfo来获取编辑框(在COMBOBOXINFO::hwndItem)成员中的句柄并调用SetWindowText它,但这也不起作用(GetComboBoxInfo虽然成功)。但我无法想象这是一个特别奇怪的用例,所以也许可以通过其他方式?如果有帮助,组合框实际上是所有者绘制的 ( CBS_OWNERDRAWFIXED)。

标签: c++winapicomboboxmfc

解决方案


当您已经绘制了组合框时,您就会知道

  1. 如果没有选择任何内容lpdis->itemID == -1
  2. 当必须绘制编辑控件部件时,您会收到消息。在这种情况下lpdis->itemState已经ODS_COMBOBOXEDIT设置。

所以你可以画你想要的任何东西。


推荐阅读