2017-01-31 5 views
0

В настоящее время у меня есть программа MFC SDI, которая отображает данные в Open GL. Я пытаюсь изменить программу для одновременного отображения нескольких файлов данных с помощью окон разделителей. Другими словами, если есть четыре окна сплиттера, каждый из них имеет отдельный файл.Несколько документов/представлений в окне MFC Splitter

До сих пор все примеры, которые я нашел, отображают только один документ во множестве видов, но мне нужно отображать сразу несколько документов.

Я начинаю заключать, что проблема может быть в том, что это интерфейс SDI. По-моему, я изначально думал, что с тех пор, как я использовал окна сплиттера, он будет поддерживать сразу несколько документов.

Итак, мой первый вопрос заключается в том, является ли интерфейс SDI проблемой? Я ограничен только одним файлом за раз?

Если ответ заключается в том, что мне нужно использовать MDI, то могу ли я отобразить несколько документов в одном представлении MDI с помощью разделителей или мне нужно открыть несколько окон MDI?

Спасибо

+0

Похоже, что вы должны перезапустить проект с помощью интерфейса MDI. :) –

+0

MDI необходим для обработки/просмотра нескольких документов (SDI создает только один объект doc). Существует два способа реализации этого: дочерние окна MDI (по одному для каждого объекта документа) и представления с вкладками. Никогда не видели приложение, использующее окна сплиттера, для отображения нескольких документов (по одному в каждой панели). Это выглядело бы очень нестандартно, и если вы возьмете на себя задачу самостоятельно выполнить работу с фреймами, вам придется решить такие проблемы, как разделение клиентской области, если вам нужно отобразить 3 или 4 документа, или пользователь открывает еще один - много и спекуляция, и реализация! –

+0

В одном из наших приложений MDI используется окно сплиттера для разных типов документов/представлений в каждом разделе. Очень полезный (хотя и не приложение MDI по умолчанию, в котором каждый документ представляет собой отдельный файл, но наш - это один файл на диске, содержащий разные производные классы «CDocument»). – franji1

ответ

0

Я думаю, что создание нескольких MDI-дочерние окна должны быть очень приемлемы, так как они полностью работоспособны (они могут быть максимальным, закрыты или плиточный). Вы также можете отправить команду Window-> Tile, как только ваше приложение войдет в состояние ожидания (yields); они будут полностью занимать клиентскую область. Вы даже можете получить более глубокие настройки и предоставить некоторые настройки своему классу CMDIChildWnd, например отключить закрытие, перемещение или изменение размера или иметь более короткую или обычную или без заголовка (вам может потребоваться настроить обработку сообщений, не относящихся к клиентской зоне). Также экспериментируйте с расширенным стилем окна WS_EX_TOOLWINDOW (не уверен, что это хорошо работает с дочерними окнами MDI, хотя вам придется протестировать его, по крайней мере, для Windows 8/10 и 7).

Другим решением может быть создание MDI-приложения с вкладками и настройка окна, вмещающего вкладки, так что они не являются ... фактически вкладками, просто простыми неперекрывающимися дочерними окнами (вам придется их упорядочить клиентская область самостоятельно). Это может быть предпочтительнее, если вид wnidows имеет фиксированный размер (либо заданный размер, либо определяется данными документа, например, размер изображения) и не должен изменяться (пользователем). Окно MainFrame также должно быть настроено для отображения полос прокрутки, если область, необходимая для отображения всех просмотров, превышает клиентскую область. Это большая работа, потому что вам нужно будет изменить классы окон, чтобы обеспечить функциональность. MFC изначально не предназначалась для поддержки и глубоко вникала в источники MFC.