C ++ MFC SDI创建子窗口

时间:2016-05-03 10:09:03

标签: c++ mfc

我可能听起来有点像白痴因为不知道更好,但坦率地说,我觉得更倾向于责怪网上缺乏帮助。

在我听说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派生我自己的类后感到困惑。

1 个答案:

答案 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;
}