C++MFC SDI创建子窗口

C++ MFC SDI create child window

本文关键字:窗口 创建 SDI C++MFC      更新时间:2023-10-16

我可能会因为不知道更多而听起来有点像白痴,但坦率地说,我更倾向于指责在这件事上缺乏在线帮助。

在我听说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是用于创建新子窗口的函数,所以我试图将这里的示例应用于我的应用程序,但我遇到了一个错误,因为它无法创建窗口。我该如何完成我想要做的事情?

额外的好处:如何将数据传递给新的子窗口?假设您希望在首次向用户显示窗口时设置某些变量/值。我试图遵循这个答案,但在基于CMultiDocTemplate派生出自己的类后,我感到困惑。

如果我正确理解您的问题,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;
}