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 heare вместо 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