【问题标题】:How to get the currently selected text in a CComboBoxEx?如何在 CComboBoxEx 中获取当前选定的文本?
【发布时间】:2023-04-07 15:33:02
【问题描述】:

我解决问题的第一个方法是在CComboBoxEx 控件上调用GetWindowsText 方法,但我发现没有关联的文本。在分析了Spy++的控件并阅读了CComboBoxEx上的一些文档后,我意识到这些类型的控件只是经典ComboBox的父级:

我尝试在子 ComboBox 上使用 GetLBText() 方法,将 GetCurSel() 作为参数传递,但我只得到一些错误的文本(正确的文本应该是“英语”):

我错过了什么吗?提前致谢!

【问题讨论】:

  • 你是如何使用GetLBText的,因为那合适的函数?
  • @acraig5075 我这样调用函数:CString szText; GetLBText(GetCurSel(), szText);
  • 您是否尝试在 comboBoxEx 继承类中检索文本?是的,那么在任何特定事件上?
  • @SantoshDhanawade 我正在尝试创建子 ComboBox 的子类,我需要在 OnPaint () 消息期间恢复文本以便能够手动绘制它。
  • GetCurSel 返回CB_ERR,以防未选择任何项目。如果它返回不同的值,则将该值传递给GetLBText。如果这对您不起作用,我们需要查看 minimal reproducible example

标签: c++ user-interface mfc comboboxex


【解决方案1】:

您要做的是使用类向导将控件映射到int 变量:

现在可以随时轻松访问所选文本。您需要使用GetItem 函数。例如(代码未测试):

COMBOBOXEXITEM cmbItem;
CString strText;

cmbItem.mask = CBEIF_TEXT;
cmbItem.iItem = m_cbItemIndex;
cmbItem.pszText = strText.GetBuffer(_MAX_PATH);
m_cbMyCombo.GetItem(&cmbItem);
strText.ReleaseBuffer();

简而言之,您需要使用COMBOBOXEXITEM 并使用正确的标志对其进行初始化,以说明您希望从扩展组合中获取哪些信息。那和项目索引。大功告成!


我知道您有自己的继承类,但机制是相同的。你不使用GetLBText。您使用带有索引和GetItem 的结构来获取选定的文本。

【讨论】:

    【解决方案2】:

    最后我设法找回了正确的名字;如下图所示,ComboBox 只是 CombBoxEx32 的子代:

    我从子ComboBox 中检索到指向父ComboBoxEx32 的指针,并以这种方式搜索文本:

    CString szText;
    CComboBoxEx cbParentCombo ;
    cbParentCombo.Attach( GetParent()->GetSafeHwnd()) ;
    cbParentCombo.GetLBText( GetCurSel(), szText) ;
    cbParentCombo.Detach() ;
    

    我的错误是我直接从子 ComboBox 而不是父 CComboBoxEx 调用 GetLBText();正因为如此,我得到的只是一些随机的胡言乱语。 GetLBText() 确实是正确的解决方案。

    【讨论】:

    • 很好地提出了解决方案。我添加了一个答案,告诉您应该如何从 CComboBoxEx 对象中获取当前选定的文本。希望这会有所帮助!
    猜你喜欢
    • 2012-09-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多