如何根据父对话框中设置的变量在子MFC对话框中显示值?

时间:2014-11-09 20:37:46

标签: c++ visual-c++ mfc dialog

我正在制作一个MFC项目。在主对话框中,有一个按钮可以打开一个用户输入的子对话框。然后,当在子框中单击“确定”时,此数据将设置为父对话框中的变量。这一切都完美无缺。

现在,子框中的文本框初始化为子对话框的OnInitDialog()中的预设值。我希望这些值初始化为它们在当前父对话框中连接的变量。

因此,例如,我有一个文本框,设置在名为sampleCount的整数变量中。在我的子对话框中(只显示此变量的代码)

void ChildBox::DoDataExchange(CdataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_SAMPCOUNT, sampCnt);
}

BOOL FNameIn::OnInitDialog()
{
    CDialog::OnInitDialog();
    GetDlgItem(IDC_SAMPCOUNT)->SetWindowTextA("1");
    return TRUE;
}

然后在父对话框中我有

void ParentDialog::OnInput()
{
    ChildBox dlg;
    if (dlg.DoModal() == IDOK)
    {
        sampleCount = dlg.sampCnt;
    }
}

正如我所说,这段代码都可以,但是每次打开ChildBox时,sampleCount文本框都设置为1.如果我键入20,然后点击确定并将ParentDialog中的sampleCount变量设置为20我希望它下次打开子对话框时,在文本框中显示20。该变量也可以由ParentDialog中的另一个函数自动设置,因此在子对话框中输入的最后一个值并不总是正确的,它需要使用当前ParentDialog中变量sampleCount的值。

我觉得这应该是非常直接的,但我无法弄明白,谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

修改子对话框的构造函数以接受CString参数并将其存储到子代的sampCnt变量中。然后,由于DDX_Text语句,MFC代码将在控件中显示它。

答案 1 :(得分:1)

删除GetDlgItem(IDC_SAMPCOUNT)->SetWindowTextA("1");行并在调用dlg.DoModal()之前设置值,例如

ChildBox dlg;
dlg.sampCnt = sampleCount;
if (dlg.DoModal() == IDOK)
{   sampleCount = dlg.sampCnt;
}

答案 2 :(得分:0)

我认为你正在创建ChildBox Dialog的局部变量 所以,即使你为它的变量赋值,它也行不通。

而是创建ChildBox对话框的指针变量

void ParentDialog :: OnInput() {

ChildBox *dlg;
if (dlg->DoModal() == IDOK)
{
    sampleCount = dlg->sampCnt;
}
dlg = NULL ;

}