我可能听起来有点像白痴因为不知道更好,但坦率地说,我觉得更倾向于责怪网上缺乏帮助。
在我听说MFC的一般意见之前,我决定使用MFC创建一个新程序(使用带有View / Doc模型的SDI)。所以我的应用程序包括主框架窗口(CMainFrame
)和子窗口(CMFCTestView
)和文档(CMFCTestDoc
)。无论如何,我想拥有它,以便当用户按下工具栏上的“新建”按钮时,它会删除我当前拥有的子窗口,并用新的新窗口替换它。
我目前的代码是:
void CMainFrame::OnFileNew()
{
#ifdef _DEBUG
_cprintf("New Game!");
#endif
Board b = Board(9, 9, 9);
theApp.RecieveBoard(b);
// Create(_T("CMFCTestDoc"), _T("CMFCTestView"), WS_CHILD | WS_VISIBLE,
// rectDefault, this);
CreateEx(NULL, _T("CMFCTestView"), _T("Minesweeper"), WS_CHILD | WS_VISIBLE, rectDefault, this, IDR_MAINFRAME, 0);
}
我在网上找到的少量信息告诉我CreateEx
是用来创建新子窗口的函数,所以我尝试将the example here应用到我的应用程序中,但是我得到了错误,因为它无法创建窗口。我实际上应该如何完成我想要做的事情?
额外奖励:如何将数据传递到新的子窗口?假设您希望窗口在首次向用户显示时设置某些变量/值。我尝试跟随this answer,但在基于CMultiDocTemplate派生我自己的类后感到困惑。
答案 0 :(得分:1)
如果我正确理解您的问题,MFC SDI应用程序将重复使用相同的文档和默认视图来显示文档的内容。你没有必要
处理主框架窗口中的new file
命令以创建新视图。当用户单击new file
命令CDocument::OnNewDocument
时,默认实现将调用文档类的成员函数。从那里,您可以重新初始化您的数据。
可能是这样的:
BOOL CMFC_testDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
//here you reinitialize your data in the document class,which will be presented by the view to the user
return TRUE;
}