MFC - 两个CDialog之间的通信

时间:2012-06-24 15:05:09

标签: visual-studio-2010 mfc dialog

我有一个基于MFC对话框的应用程序。

主对话框包含一个子对话框(用于CTabCtrl控件)。

  • CDialog mainDlgClass;

  • CMyChildDialog childDlgClass;

我如何能够从主对话框修改子对话框的控件或发送消息的可能性,例如:通过PostMessage并使用RegisterWindowMessage以便我可以修改子对话框的控件?

我不知道如何检索子对话框的句柄。

void mainDlgClass::check() 
{
   if(condition)
       PostMessage_to_the_child_dialog(***);
   OR
   if(condition)
       Modify_CStatic_text_on_the_child_dialog(***);

}

编辑:

结构截图:

资源编辑器

resource editor

包含ChidlDialog的主对话框+ CTabCtrl

main dialog

子对话框设置了WS_CHILD属性。

解决。

1 个答案:

答案 0 :(得分:2)

假设第二个对话框是main的子对话框(它具有WS_CHILD样式),它必须由主对话框创建。子对话框仅限于父窗口的客户区域。

您可以在子对话框类中提供公共成员函数(访问器),以便主对话框访问并更改您需要的任何内容。或者,如果将子类化的子对话框控件声明为公共对象,则可以直接访问它们(类似于OOP)。

问题是你可能会将第二个对话框称为子对象,而它实际上并不是孩子(没有WS_CHILD样式)。不过,如果第二个对话框生成为无模式,则可以使用上述方法。

如果是模态,则方法可能不同,因为主对话框已禁用;因此,用户无法访问主对话框控件。如果是这种情况,请您提供更多信息?

例如,在什么情况下,您想要更改控件。