如何基于父对话框中设置的变量在子MFC对话框中显示值

How to display values in child MFC dialog box based on variables set in parent dialog box?

本文关键字:对话框 MFC 显示 何基于 设置 变量      更新时间:2023-10-16

我正在处理一个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,然后点击ok并将ParentDialog中的sampleCount变量设置为20。我希望下次打开子对话框时,它在文本框中显示20。该变量也可以由ParentDialog中的另一个函数自动设置,因此在子对话框中输入的最后一个值并不总是正确的,它需要使用ParentDialog中变量sampleCount的当前值。

我觉得这应该很直接,但我不太明白,谢谢你的帮助。

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

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

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

我认为您正在创建ChildBox对话框的局部变量因此,即使您为其变量赋值,它也不会起作用。

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

void ParentDialog::OnInput(){

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

}