如何将CComboBox的选择项设置为CString数组



我正在寻找显示4行的组合框,其中第一行显示"a",第二行显示"b"。。。"c"。。。"d"

cb1 = new CComboBox;
cb1->Create( WS_VSCROLL | CBS_DROPDOWN | WS_VISIBLE | WS_BORDER, CRect(20,200,200, 300), this, 30 );
CString itemSet[] = {"a","b","c","d"};

//I am to set the array all at once with out doing each itme ??
cb1.AddString(itemSet); //fails

没有函数可以一次完成。你可以按照Jeeva的建议做,一个简单的循环遍历你的阵列:

CString itemSet[] = {"a","b","c","d"};   
for (int i = 0; i < _countof(itemSet); ++i)
{
    cb1.AddString(itemSet[i]);
}

然而,如果你打算经常使用它,你可以创建自己的CCombobox派生类,并添加一个函数来实现它

class CMyCombo : public CCombobox
{
public:
    CMyCombo();
    void AddStrings(const CString* strings, int num);
    // ...
}

void CMyCombo::AddStrings(const CString* strings, int num)
{
    for (int i = 0; i < num; ++i)
    {
        cb1.AddString(strings[i]);
    }
}

实际上,我可能会使用一个容器,比如std::vectorCStringArray,但你已经明白了。

顺便说一句,如果您使用的是可以本地化的字符串,则不应仅依赖于字符串。在这里可以找到更好的方法。

最后一件事:通常不需要创建动态控件。通常更容易为它们创建成员变量。

执行类似的操作

    CString arr[2] = {_T("A"),_T("B")};
    for(int i =0 ;i <2; i++)
    {
        m_ctrlCombo.AddString(arr[i]);
    }

最新更新