具有三个主窗口的应用程序结构

时间:2019-06-21 12:43:39

标签: mfc

我想构建一个类似Skyrim Creation Kit的关卡/游戏编辑器。在图像上,您可以看到:

  • 在底部具有菜单,工具栏和状态栏的主窗口/框架,

  • 显示当前加载级别的“渲染”窗口

  • 包含游戏中使用的每个对象/实体的对象窗口,

  • ,以及在单元格视图中左侧包含所有级别的列表,在右侧包含属于当前已加载级别的所有实体。

要注意的一件事是这三个窗口是浮动的,您可以将它们四处移动,并且在编辑关卡时应始终存在。

我想就如何构造MFC项目以模仿Skyrim编辑器提供一些建议:我不知道我应该为每个窗口使用CDialog还是仅使用CFrames。如果您想知道我做了什么,可以阅读以下段落。

这是一张图片,显示了我设法完成的工作。 enter image description here

使用MSVC我创建了一个“基于对话框”的MFC项目,但我不知道这是否是一个错误,也许我应该选择SDI模板,因为确实只有一个文档(该文档包含了所有数据)由实体,关卡,子画面,声音效果,脚本,对话等组成的游戏。)

到目前为止,我已经设法创建了主窗口和渲染窗口。主窗口从CDialogEx派生,并通过在应用程序的InitInstance()中调用DoModal()创建。

BOOL CGameEditorApp::InitInstance() {
    // ...
    CGameEditorDlg dlg;                // main window derived from CDialogEx
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    // ...
}

在主窗口的OnInitDialog()中,我像这样创建渲染窗口

BOOL CGameEditor1Dlg::OnInitDialog() {
    // ...
    m_RenderWindow.Create(IDD_DLG_RENWIN);
    // ...
}

现在尝试创建对象窗口时出现问题。为了复制一个Skyrim编辑器,我想要一个CSplitter包含一行和两列:左窗格将具有Filter选项和CTreeCtrl,右窗格将具有CListCtrl。因此,我尝试像渲染窗口一样使用CDialog jsut,但似乎无法拆分CDialog对象。现在,我找到了一个代码示例,其中在CDialog中创建了CFrameWnd,然后可以在该框架中创建CSplitter,但是由于我对MFC的了解很少,所以我无法使其工作。

0 个答案:

没有答案