Структура приложения с тремя основными окнами - PullRequest
0 голосов
/ 21 июня 2019

Я хочу создать редактор уровней / игр, похожий на Skyrim Creation Kit . На картинке видно:

  • главное окно / рамка с меню, панелью инструментов и строкой состояния внизу,

  • Окно рендеринга, отображающее текущий загруженный уровень,

  • Окно объектов, содержащее все объекты / объекты, используемые в игре,

  • и представление ячейки, которое содержит слева список всех уровней, а справа все объекты, принадлежащие текущему загруженному уровню.

Следует отметить, что эти три окна являются плавающими, вы можете перемещать их и всегда должны присутствовать при редактировании уровня.

Я хотел бы получить несколько советов о том, как мне структурировать свой проект MFC, чтобы имитировать редактор Skyrim: я не знаю, должен ли я использовать CDialog или просто CFrames для каждого окна. Если вы хотите узнать, что я сделал, вы можете прочитать следующие абзацы.

Вот картинка, показывающая, что мне удалось сделать. enter image description here

С 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 очень малы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...