我想构建一个类似Skyrim Creation Kit的关卡/游戏编辑器。在图像上,您可以看到:
在底部具有菜单,工具栏和状态栏的主窗口/框架,
显示当前加载级别的“渲染”窗口
包含游戏中使用的每个对象/实体的对象窗口,
,以及在单元格视图中左侧包含所有级别的列表,在右侧包含属于当前已加载级别的所有实体。
要注意的一件事是这三个窗口是浮动的,您可以将它们四处移动,并且在编辑关卡时应始终存在。
我想就如何构造MFC项目以模仿Skyrim编辑器提供一些建议:我不知道我应该为每个窗口使用CDialog还是仅使用CFrames。如果您想知道我做了什么,可以阅读以下段落。
使用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的了解很少,所以我无法使其工作。