Я хочу создать редактор уровней / игр, похожий на Skyrim Creation Kit . На картинке видно:
главное окно / рамка с меню, панелью инструментов и строкой состояния внизу,
Окно рендеринга, отображающее текущий загруженный уровень,
Окно объектов, содержащее все объекты / объекты, используемые в игре,
и представление ячейки, которое содержит слева список всех уровней, а справа все объекты, принадлежащие текущему загруженному уровню.
Следует отметить, что эти три окна являются плавающими, вы можете перемещать их и всегда должны присутствовать при редактировании уровня.
Я хотел бы получить несколько советов о том, как мне структурировать свой проект MFC, чтобы имитировать редактор Skyrim: я не знаю, должен ли я использовать CDialog или просто CFrames для каждого окна. Если вы хотите узнать, что я сделал, вы можете прочитать следующие абзацы.
Вот картинка, показывающая, что мне удалось сделать.
С MSVC я создал проект MFC «на основе диалогового окна», но я не знаю, является ли это ошибкой, возможно, мне следовало выбрать шаблон SDI, потому что действительно есть один документ (документ - это все данные для игра, которая состоит из сущностей, уровней, спрайт-листов, звуковых эффектов, скриптов, диалогов ...).
Пока мне удалось создать главное окно и окно рендеринга. Главное окно является производным от CDialogEx и создается путем вызова DoModal () в InitInstance () приложения.
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. Теперь я нашел пример кода, в котором CFrameWnd был создан внутри CDialog, а затем в этом фрейме был возможен CSplitter, но я не могу заставить его работать, так как мои знания MFC очень малы.