Вектор возврата диалогового окна MFC

Я создаю модальное диалоговое окно и динамически создаю текстовые поля на основе указанного пользователем количества. Затем я сохраняю значения этих текстовых полей в векторе

vector <CString*> textBoxText;

Я хочу передать вектор обратно, когда диалоговое окно закрывается. Я попытался передать указатель в диалоговое окно и обновить указатель в: void CRadioDialog::OnBnClickedOk(). Однако это не сработало. Я не думаю, что смогу сделать это с обменом данными, есть ли способ сделать это?

Спасибо,


person mgalal    schedule 06.07.2012    source источник
comment
Вы можете передать ссылку в конструкторе. Или вы можете просто создать другую функцию в классе диалога, которая возвращает вектор.   -  person Chris Dargis    schedule 09.07.2012


Ответы (3)


Ты можешь это сделать. Просто убедитесь, что вы возвращаете фактические CString объекты, а не указатели!

vector <CString> textBoxText; 

Что находится в OnBnClickedOk ?

person Ajay    schedule 07.07.2012
comment
это обработчик нажатия кнопки OK в диалоговом окне. Объясните как вернуть? - person mgalal; 07.07.2012

предполагая, что у вас есть локальный член CRadioDialog.h:

std::vector <CString> textBoxText;

Я предлагаю вам использовать CString вместо CString*.

вы можете добавить метод в свой CRadioDialog.h:

void fill_my_vector( std::vector<CString>& out_vector );

и CRadioDialog.cpp:

void CRadioDialog::fill_my_vector( std::vector<CString>& out_vector )
{
    std::copy ( textBoxText.begin(), textBoxText.end(), out_vector.begin() );
}

вы уже заполняете свой локальный textBoxText своими cstrings на CRadioDialog::OnBnClickedOk()

код вызова: void main_window::caller() { ...

    std::vector <CString> results;

    CRadioDialog dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        dlg.fill_my_vector( results );
        /* USE YOUR VECTOR */
    }

...
}

Это не лучший метод оптимизации, но его легко понять. Надеюсь, поможет.

person Albertino80    schedule 08.07.2012

Спасибо за всю помощь, в итоге я использовал этот метод, который был очень простым и рекомендованным с другого форума:

Я добавил это в файл dialog.h:

public:
    const std::vector<CString>& TextBoxTexts() const
    {
        return textBoxText;
    }

и назвал это в моем основном представлении:

CRadioDialog dialog; 
if(rDLG.DoModal() == IDOK)
{   
    vector<CString> text;
    text = dialog.TextBoxTexts();
}
person mgalal    schedule 09.07.2012