如何将CComboBox的选择项一次性设置为CString数组?

时间:2012-03-29 00:05:36

标签: visual-c++ mfc

我正在寻找组合框来显示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

2 个答案:

答案 0 :(得分:0)

做这样的事情

    CString arr[2] = {_T("A"),_T("B")};

    for(int i =0 ;i <2; i++)
    {
        m_ctrlCombo.AddString(arr[i]);
    }

答案 1 :(得分:0)

一次完成没有任何功能。你可以像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,但你明白了。

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

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