Visual c++ 在CDialog类型的子窗体之间传递数据 我有一个MS Visual C++ 2005项目,在这里我试图有一个主对话框,其中有一个部分用来显示可选的子窗体对话框。每个子窗体的大小相同,但布局不同。使用组合框控件执行选择。我搜索了实现此功能的最佳方法,发现有人在1999年开发了一个类,用于处理主对话框中的子对话框:

Visual c++ 在CDialog类型的子窗体之间传递数据 我有一个MS Visual C++ 2005项目,在这里我试图有一个主对话框,其中有一个部分用来显示可选的子窗体对话框。每个子窗体的大小相同,但布局不同。使用组合框控件执行选择。我搜索了实现此功能的最佳方法,发现有人在1999年开发了一个类,用于处理主对话框中的子对话框:,visual-c++,mfc,cdialog,subforms,Visual C++,Mfc,Cdialog,Subforms,经过额外修改: 这段代码在选择和显示各种子窗体时非常有效,但我似乎无法将数据从一个子窗体传递到另一个子窗体。具体而言,每个子窗体都由几个编辑控件组成。我希望用户能够在子表单#1上的编辑控件中输入值,并在子表单#2上的编辑控件或静态文本控件中回显该值 我尝试通过使用子窗体对话框类(名为CSubFormType和CDialog的一个子类)的成员函数来实现这一点,该函数将在终止数据输入编辑控件(即Box1a)的焦点时执行 void CSubFormType::OnEnKillfocusBox1a()

经过额外修改:

这段代码在选择和显示各种子窗体时非常有效,但我似乎无法将数据从一个子窗体传递到另一个子窗体。具体而言,每个子窗体都由几个编辑控件组成。我希望用户能够在子表单#1上的编辑控件中输入值,并在子表单#2上的编辑控件或静态文本控件中回显该值

我尝试通过使用子窗体对话框类(名为CSubFormType和CDialog的一个子类)的成员函数来实现这一点,该函数将在终止数据输入编辑控件(即Box1a)的焦点时执行

void CSubFormType::OnEnKillfocusBox1a(){

}

CSubFormType要直接调用OnEnKillfocusBox1a的消息映射为:

ON_EN_KILLFOCUS(IDC_Box1a和CSubFormType::OnEnKillfocusBox1a)

或通过以下方式间接:

单击时(IDOK,&CSubFormType::OnBnClickedOk)//CSubFormType::OnBnClickedOk然后调用OnEnKillfocusBox1a

我遇到的问题是:

1) 单击时(IDOK,&CSubFormType::OnBnClickedOk),在将数据输入到框1a后按Enter键时不会调用。而是调用主对话框的OnBnClickedOk成员函数

2) 当CSubFormType::OnEnKillfocusBox1a执行时(通过鼠标单击其他位置),它能够将在Box1a中输入的值回显到同一子表单#1上的Box1b,但不会将值回显到子表单#2上的Box2

对于我需要做些什么来解决这些问题或采用更好的方法来实现相同的通用功能,我们将不胜感激

正在使用的主对话框的组合框选择成员函数:

void CMain::OnCbnSelchange() { int选择

selection = ((CComboBox*)GetDlgItem(IDC_Select))->GetCurSel();

switch(selection)
{
    case 0: // Select Subform 1
        //Do nothing
        break;

    case 1: // Select Subform 2
        SetDlgItemText (IDC_Box2, outstr); //Set Box2 text on Subform #2
        break;
 }

m_SubForms.ShowSubForm(selection);

}

更改主组合框选择时同步所有表单。当文本框文本发生更改时,您可以尝试立即执行此操作,但这不是必需的,因为只有一个表单可见

谢谢你的评论。我将用于组合框选择的代码添加到原始帖子的末尾。是否需要做一些特殊的事情来同步所有表单?我不知道,这是您的要求。
selection = ((CComboBox*)GetDlgItem(IDC_Select))->GetCurSel();

switch(selection)
{
    case 0: // Select Subform 1
        //Do nothing
        break;

    case 1: // Select Subform 2
        SetDlgItemText (IDC_Box2, outstr); //Set Box2 text on Subform #2
        break;
 }

m_SubForms.ShowSubForm(selection);