Как установить элементы выбора для CComboBox, чтобы быть массивом CString все сразу? - PullRequest
0 голосов
/ 29 марта 2012

Я ищу в выпадающем списке 4 строки, где первая строка показывает «a», 2-я строка показывает «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 голосов
/ 30 марта 2012

Нет функции сделать это за один раз. Вы можете сделать, как предлагает Джива, простой цикл, проходящий через ваш массив:

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, но вы поняли.

Кстати, если вы используете строки, которые могут быть локализованы, вы не должны полагаться только на строки. Лучший подход можно найти здесь .

И последнее: обычно не нужно создавать элементы управления на лету. Обычно проще создать для них переменные-члены.

0 голосов
/ 29 марта 2012

Сделай что-нибудь подобное

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

    for(int i =0 ;i <2; i++)
    {
        m_ctrlCombo.AddString(arr[i]);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...