C++ MFC SDI 创建子窗口

标签 c++ mfc

我可能听起来有点像个白痴,因为我什么都不知道,但坦率地说,我更倾向于将这件事归咎于缺乏在线帮助。

在听说 MFC 的一般意见之前,我决定使用 MFC 创建一个新程序(使用 SDI 和 View/Doc 模型)。所以我的应用程序包括主框架窗口 (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 派生我自己的类后感到困惑。

最佳答案

如果我正确理解您的问题,MFC SDI 应用程序将重用相同的文档和默认 View 来显示文档的内容。你不必 从主框架窗口处理 new file 命令以创建新 View 。当用户点击 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;
}

关于C++ MFC SDI 创建子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37001297/

相关文章:

windows - 64 位机器上的 DWORD 和 DWORD_PTR

c++ - 从两个单链表中找到相同的节点。不能用hash,不能是O(n^2)复杂度

c++ - 字符的预处理器字符串化

c++ - 如何查找窗口的 SW_SHOW/SW_HIDE 状态

c++ - 将注册表访问转换为来自 MFC 功能包的数据库调用

c++ - 在 Linux 上运行 MFC 程序

mfc - VS 2017 : fatal error RC1015: cannot open include file 'winres.h'

python - Cython 获取 C++ 对象列表的长度

c++ - 我究竟做错了什么? (C++ 字符串)

c++ - 分析模板元程序编译时间