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);