我对MFC应用程序有以下要求:
Dialog 1 --> Dialog 2 --> Dialog 3 --> Dialog 4 --> Dialog 5
^ | | ^ ^ |
| ---------------------------- | |
| | | |
| -------------------------- |
--------------------------------------------------------
问题:我应该使用哪种应用类型? (SDI,MDI,基于对话)
答案 0 :(得分:1)
选项卡式对话框怎么样?从基于对话框的体系结构开始,但用CPropertySheet替换主对话框。对话框1到对话框5将成为选项卡表中的页面。
答案 1 :(得分:0)
选择SDI或MDI。很多时候像你这样的初始要求使SDI最合适,但人们通常必须在路的尽头将SDI转换为MDI,所以如果你想立即启动MDI,请使用自己的判断但是考虑到你今天的要求SDI是不错的选择
您也可以使用Dialog实现相同的功能并使用DoModal(),但每次都会成为一个新窗口。我实际上是自己做的,因为我不得不使用CDialog,这就是我做的方式:
// here how I exit from say a given dialog to a different screen.
void CSummaryDlg::OnBnClickedButtonBack()
{
EndDialog( Batch::BatchGoBack ); // goes to previous dialog
}
void CSummaryDlg::OnBnClickedButtonExitBatch()
{
EndDialog( Batch::BatchComplete ); // finishes all dialogs in the chain.
}
// how ending all dialog takes places (example of propagation)
void CResultDlg::OnBnClickedButtonViewReport()
{
CSummaryDlg dlg;
int dlgResult = dlg.DoModal();
if ( dlgResult == Batch::BatchComplete )
EndDialog( Batch::BatchComplete );
}
答案 2 :(得分:0)
我建议创建SDI应用程序然后删除所有文档和视图类。只保留CFrameWnd和CWinApp类。使CFrameWnd不可调整大小并动态创建所有子对话框。那么你将有一个窗口CFrameWnd,里面有许多动态加载对话框。
答案 3 :(得分:0)
您可以使用空对话框创建基于对话框的应用程序,然后将所需对话框动态插入为填充外部对话框的整个客户区域的新窗口。设置内部对话框的DS_CONTROL
style。当您从一个对话框切换到另一个对话框时,您可以销毁旧对话框,或者只是隐藏它以便在以后再次需要时再次激活它。