CComboBox FindString 为空
CComboBox FindString empty
MFC CComboBox 允许用户对空字符串执行 AddString
。我只是通过在 AddString
之前和之后执行一个 GetCount() 来证明这一点;计数为0,然后变为1; GUI 似乎也反映了这一点,因为它的列表是一个巨大的空框,添加时它变成了一行。
我还进一步证明了
int a = m_combo.GetCount();
CString sx= _T("Not empty string");
if(a == 1)
m_combo.GetLBText(0, sx);
TRACE(_T("Start<%s>End"), sx);
并且输出 window 显示
File.cpp(9) : atlTraceGeneral - Start<>End
因此我们得出结论 sx
变量为空。
然后我做一个 FindString
有一个空的 CString m_name 变量:
int idx= m_combo.FindString(-1, m_name);
还有它returnsCB_ERR
!
这是空字符串条目的标准行为吗?官方文档对此没有任何说明!
如果是,覆盖它的最简单方法是什么?资源中是否有一些参数或变化来改变行为?如果没有,我正在考虑针对字符串为空的情况推导或编写 class!
我为空字符串手动完成了它并且有效!
CString sItem;
int idx_aux= CB_ERR;
// need it because FindString, FindStringExact and SelectSring return CB_ERR when we provide an empty string to them!
if(m_name.IsEmpty())
{
for (int i=0; i<m_combo.GetCount(); i++)
{
m_combo.GetLBText(i, sItem);
if(sItem.IsEmpty())
{
idx_aux= i;
break;
}
}
}
else
idx_aux= m_combo.FindString(-1, m_name);
MFC CComboBox 允许用户对空字符串执行 AddString
。我只是通过在 AddString
之前和之后执行一个 GetCount() 来证明这一点;计数为0,然后变为1; GUI 似乎也反映了这一点,因为它的列表是一个巨大的空框,添加时它变成了一行。
我还进一步证明了
int a = m_combo.GetCount();
CString sx= _T("Not empty string");
if(a == 1)
m_combo.GetLBText(0, sx);
TRACE(_T("Start<%s>End"), sx);
并且输出 window 显示
File.cpp(9) : atlTraceGeneral - Start<>End
因此我们得出结论 sx
变量为空。
然后我做一个 FindString
有一个空的 CString m_name 变量:
int idx= m_combo.FindString(-1, m_name);
还有它returnsCB_ERR
!
这是空字符串条目的标准行为吗?官方文档对此没有任何说明!
如果是,覆盖它的最简单方法是什么?资源中是否有一些参数或变化来改变行为?如果没有,我正在考虑针对字符串为空的情况推导或编写 class!
我为空字符串手动完成了它并且有效!
CString sItem;
int idx_aux= CB_ERR;
// need it because FindString, FindStringExact and SelectSring return CB_ERR when we provide an empty string to them!
if(m_name.IsEmpty())
{
for (int i=0; i<m_combo.GetCount(); i++)
{
m_combo.GetLBText(i, sItem);
if(sItem.IsEmpty())
{
idx_aux= i;
break;
}
}
}
else
idx_aux= m_combo.FindString(-1, m_name);