如何在CComboBoxEx中获取当前选定的文本?

时间:2019-12-05 09:26:35

标签: c++ user-interface mfc comboboxex

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

Spy's screenshot

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

Wrong text

我想念什么吗?预先感谢!

2 个答案:

答案 0 :(得分:2)

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

Class Wizard

现在,可以随时轻松访问所选文本。您需要使用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的结构来获取所选文本。

答案 1 :(得分:1)

最后,我设法检索到正确的名称;如下图所示,ComboBox只是CombBoxEx32的子代:

enter image description here

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

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

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