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

C++ 在MFC组合框中设置文本,而不将其添加到列表中,c++,winapi,combobox,mfc,C++,Winapi,Combobox,Mfc,我有一个MFC组合框,特别是从cmbobox派生的类型,创建为下拉列表框,不可能编辑所选条目,即可选择项的简单列表 我确实支持不选择任何项目的可能性。我知道我可以直接调用SetCurSel(-1),组合框的编辑字段将为空,直到用户从下拉列表中选择“正确”的项目。但我实际上更喜欢显示某种默认文本,而不仅仅是一个空字段。因此,我需要做的是设置编辑字段的文本,而不将该文本添加到项目列表或使项目用户可编辑 我在组合框上尝试了SetWindowText,但没有成功。根据一条评论建议,我还尝试使用GetCo

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

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


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

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

  • 如果
    lpdis->itemID==-1
  • 必须绘制编辑控制零件时,您将收到消息。在这种情况下,
    lpdis->itemState
    设置了
    ODS\u COMBOBOXEDIT

  • 因此,您可以绘制任何您想要的内容。

    当您已经绘制组合框时,您就会知道这一点

  • 如果
    lpdis->itemID==-1
  • 必须绘制编辑控制零件时,您将收到消息。在这种情况下,
    lpdis->itemState
    设置了
    ODS\u COMBOBOXEDIT

  • 因此,您可以根据需要绘制任何内容。

    组合框控件内置了对提示横幅的支持。MFC的
    CComboBox
    通过成员将其公开:

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


    组合框控件内置了对提示横幅的支持。MFC的
    CComboBox
    通过成员将其公开:

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


    您是否尝试呼叫,然后在call
    SetWindowText
    中使用?@RbMm感谢您的建议。但我只是试了一下,似乎不起作用。可能是因为它是ownerdraw?IIRC(可能我没有),编辑框作为itemID-1传递给
    WM_DRAWITEM
    。不管怎样,在上面设置一个断点并检查。您是否尝试调用,然后在call
    SetWindowText
    中使用?@RbMm感谢您的建议。但我只是试了一下,似乎不起作用。可能是因为它是ownerdraw?IIRC(可能我没有),编辑框作为itemID-1传递给
    WM_DRAWITEM
    。不管怎样,在上面放一个断点并检查。