2012-07-06 53 views
0

我正在创建一个模态对话框,并根据用户指定的数量动态创建文本框。然后我这些文本框的值存储在一个向量MFC对话框返回矢量

vector <CString*> textBoxText; 

我要传递的载体回对话框关闭时。我试着将一个指针传入对话框并更新指针:void CRadioDialog :: OnBnClickedOk()。但是,这并不奏效。我不认为我可以通过数据交换来做到这一点,有没有办法做到这一点?

感谢,

+0

您可以在构造函数中传递引用。或者,您可以在返回矢量的对话框类中创建另一个函数。 – 2012-07-09 02:27:10

回答

0

感谢所有帮助,我结束了使用这种方法,很容易,从不同的论坛建议:

我加入这个到dialog.h文件:

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

,并呼吁它在我的主要观点:

CRadioDialog dialog; 
if(rDLG.DoModal() == IDOK) 
{ 
    vector<CString> text; 
    text = dialog.TextBoxTexts(); 
} 
1

你可以做到这一点。只要确保你返回实际的CString对象,而不是指针!

vector <CString> textBoxText; 

什么是OnBnClickedOk

+0

这是在对话框上按下“确定”按钮时的处理程序。你能解释一下如何归还吗? – mgalal 2012-07-07 18:24:02

1

假设你有一个本地成员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与CRadioDialog :: OnBnClickedOk()

调用代码你cstrings: 无效main_window ::调用者(){ ...

std::vector <CString> results; 

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

... 
} 

这不是最佳的optiomization方法,但很容易undestand。 希望它有帮助。