我解决该问题的第一种方法是调用CComboBoxEx控件上的GetWindowsText
方法,但是我发现没有关联的文本。在使用Spy++分析控件并阅读了CComboBoxEx
的一些文档之后,我意识到这些类型的控件只是经典ComboBox的父级:
我尝试在子ComboBox上使用GetLBText()
方法,将GetCurSel()
作为参数传递,但是我只得到了一些错误的文本(正确的文本应为“英语”):
我想念什么吗?预先感谢!
答案 0 :(得分:2)
您要做的是使用 Class Wizard (类向导)将控件映射到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
的结构来获取所选文本。
答案 1 :(得分:1)
最后,我设法检索到正确的名称;如下图所示,ComboBox
只是CombBoxEx32
的子代:
我从子ComboBoxEx32
中检索了指向父ComboBox
的指针,并以此方式搜索文本:
CString szText;
CComboBoxEx cbParentCombo ;
cbParentCombo.Attach( GetParent()->GetSafeHwnd()) ;
cbParentCombo.GetLBText( GetCurSel(), szText) ;
cbParentCombo.Detach() ;
我的错误是我直接从子级GetLBText()
而不是父级ComboBox
调用CComboBoxEx
;因此,我得到的只是些胡言乱语。 GetLBText()确实是正确的解决方案。