【问题标题】:SetWindowText for combobox组合框的 SetWindowText
【发布时间】:2015-07-30 08:48:11
【问题描述】:

我想设置组合框列表中不存在的组合框文本。 例如,如果组合框有 3 个项目:

  1. 苹果
  2. 橙色
  3. 香蕉

我正在做这个组合框的选择更改事件。

ON_CBN_SELCHANGE(IDC_COMBO, OnComboClick)

void CmmAcceptCtrl::OnComboClick()
{
    CString str;
    m_combo.GetLBText(m_combo.GetCurSel(), str);

    str += " Test";    

    m_combo.SetWindowText(str);
}

现在,如果我选择“橙色”,我希望组合框的文本变为“橙色测试”,但文本没有更改,尽管我正在执行 SetWindowText,但我会得到“橙色”。

有没有一种方法可以让我们拥有与从组合框列表中选择的文本不同的文本?

【问题讨论】:

  • 下拉样式很重要,CBS_DROPDOWNLIST 不允许不匹配。
  • @HansPassant 实际上没有任何组合框样式允许不匹配。
  • 你为什么不直接改变项目本身呢?如果需要,您可以保留一个包含原始名称的单独数据结构,以便您可以使用原始名称重新填充组合框并修改选定的名称
  • 我们不知道这个控件到底是什么,因为你没有告诉我们样式
  • @MichaelWalz 另外两种样式允许在编辑控件中输入任意文本,它不必匹配列表中的条目。

标签: winapi visual-c++ combobox mfc


【解决方案1】:

这有点晚了,但我带着同样的问题来到这里,然后发现了一个窍门......

在 ON_CBN_SELCHANGE 处理程序中,您可以使用 say 向自己发布消息

PostMessage( WM_COMMAND, ID_AddTestToMyComboText)

并为此在处理程序中使用 SetWindowText。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多