如何基于父对话框中设置的变量在子MFC对话框中显示值
How to display values in child MFC dialog box based on variables set in parent dialog box?
我正在处理一个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 ;
}
- 如何在 MFC 对话框中使用 OnDraw
- "最小化"按钮不会出现在 MFC 对话框中
- MFC:与对话框的视图通信
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- 对话框 MFC 资源度量的单位是什么
- MFC 对话框属性表用法在 VS 2017 中产生错误,适用于 VS 2013
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 基于 MFC 对话框的应用程序无法调用对话框两次
- 如何在另一个线程中关闭 MFC 模式对话框并获取对话框返回值?
- 是否可以将 MFC 对话框资源附加到 CChildView
- MFC 对话框控件的"Accept Files"选项如何工作?
- 从模式对话框中退出 MFC 应用
- MFC在切换视图时如何关闭无模型对话框
- 使用MFC在对话框上拖放文件
- 添加新对话框后,MFC 应用程序启动失败并"DLL Initialization Failed"
- 如何将.wav文件保存在MFC中(使用文件对话框)
- MFC对话框数据验证失败时还原数据
- 如何隐藏对话框 MFC
- 选项卡控件中的嵌入式对话框无法在第二个对话框 MFC 中工作
- 更改对话框mfc的背景颜色