我正在寻找显示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::vector
或CStringArray
,但你已经明白了。
顺便说一句,如果您使用的是可以本地化的字符串,则不应仅依赖于字符串。在这里可以找到更好的方法。
最后一件事:通常不需要创建动态控件。通常更容易为它们创建成员变量。
执行类似的操作
CString arr[2] = {_T("A"),_T("B")};
for(int i =0 ;i <2; i++)
{
m_ctrlCombo.AddString(arr[i]);
}