我正在寻找组合框来显示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
答案 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::vector
或CStringArray
,但你明白了。
顺便说一句,如果您使用的是可以本地化的字符串,则不应仅依赖字符串。可以找到更好的方法here。
最后一件事:通常不需要动态创建控件。为它们创建成员变量通常更容易。