2014-01-16 82 views
1

我想用一个主对话框构建一个MFC应用程序,并且所有其他对话框都是此主对话框的子对象(并嵌入其中)。MFC一个父对话框,多个子对话框

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

有没有另外一种方法来做到这一点“隐藏和显示对话框”游戏?

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

+0

你有分类CDialog?听起来好像你还没有 –

+0

不,我没有... – MRM

+0

你应该,然后在主对话框中添加一个矢量,例如, std :: vector >来跟踪它们。每当你从一个对话框移动到另一个对话框时,通过向量并显示/隐藏 –

回答

0

所以我设法完成这个任务使用类IDDs。

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

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

然后,当一个新的对话框需要显示,我发信息给我的主对话框(nIDD是未决的对话框,显示IDD) :

AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND_CHANGE_WINDOW, nIDD, 0);

而在去年,在我的主对话框中,我分析所有的子窗口,并检查是否m_openedWin.nDialogIDD比赛,每个对话的国际直拨电话,所以我可以将其隐藏。在此之后,我再次解析所有chid对话框,并使用发送的消息中的nIDD显示正确的一个。

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