在MFC组合框中设置文本而不将其添加到列表中

时间:2018-05-18 10:56:49

标签: c++ winapi combobox mfc

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

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

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

2 个答案:

答案 0 :(得分:2)

当你已经绘制了组合框时,比你知道的那样

  1. 如果lpdis->itemID == -1
  2. ,则没有选择任何内容
  3. 您必须绘制编辑控件时收到消息。在这种情况下,lpdis->itemState设置了ODS_COMBOBOXEDIT
  4. 所以你可以画任何你想要的东西。

答案 1 :(得分:2)

组合框控件内置了对cue横幅的支持。 MFC的CComboBox通过CComboBox::SetCueBanner成员公开了它:

  

提示文本是一个提示,显示在组合框控件的输入区域中。显示提示文本,直到用户提供输入。