【问题标题】:MFC one parent dialog, multiple child dialogsMFC 一个父对话框,多个子对话框
【发布时间】:2014-01-16 12:43:28
【问题描述】:

我想构建一个 MFC 应用程序,其中包含一个主对话框,而所有其他对话框都是该主对话框的子对话框(并嵌入其中)。

现在,我能够在主对话框中嵌入第一个子对话框,但我想传递到下一个对话框(注意打开对话框的顺序是随机的),所以我需要隐藏第一个对话框并显示另一个.要知道当前显示哪个对话框并将其隐藏,我尝试使用CDialog 变量来存储当前打开的对话框,但我收到CObject::operator =' : cannot access private member declared in class 'CObject' 错误。

还有其他方法可以完成这个“隐藏和显示对话框”游戏吗?

编辑:我可以存储对话框的一些 ID 并使用它来完成此任务吗?

【问题讨论】:

  • 你有 CDialog 的子类吗?听起来好像你还没有
  • 你应该,然后在主对话框中添加一个带有它们的向量,例如std::vector<:shared_ptr>> 来跟踪它们。每当您从一个对话框移动到另一个对话框时,请通过矢量并显示/隐藏
  • 仅子类化就足以将对话框存储在向量或列表中?难道没有什么方法可以覆盖或改变吗?
  • 如果您至少将一个对话框子类化,您可以放入任何您想要的成员,例如对话框指针的向量。然后添加一个方法来创建所有隐藏的对话框,之后只需打开和关闭可见性即可。你没有在你的问题中解释太多,所以我只是想从你的问题中回答。
  • 属性表框架会更合适吗?

标签: c++ mfc


【解决方案1】:

所以我设法使用类 IDD 完成了这项任务。

首先,我存储最后打开的对话框的 IDD

m_dlgStartPage.Create(CStartPageDlg::IDD, this);
m_openedWin.nDialogIDD = m_dlgStartPage.IDD;
m_dlgStartPage.ShowWindow(SW_SHOW);

然后,当需要显示一个新对话框时,我会向我的主对话框发送一条消息(nIDD 是待显示对话框的 IDD):

AfxGetApp()-&gt;m_pMainWnd-&gt;SendMessage(WM_COMMAND_CHANGE_WINDOW, nIDD, 0);

最后,在我的主对话框中,我解析所有子对话框并检查m_openedWin.nDialogIDD 是否与每个对话框的 IDD 匹配,因此我可以隐藏它。在此之后,我再次解析所有的 chid 对话框,并使用发送消息中的nIDD 来显示正确的对话框。

我不是很喜欢这种方法,因为所有的解析和发送消息到主对话框的类,所以如果有人有更好的想法或方法,请发布。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多