У меня есть приложение MFC MDI. Приложение может иметь 2 или более открытых диалогов. Я хочу реализовать функцию «Сохранить рабочее пространство», чтобы при следующем открытии рабочей области пользователь открывал диалоговые окна, которые были открыты при сохранении и закрытии рабочей области. Как это сделать?
Функциональность встроена в CMDIFrameWndEx реализация. SaveMDIState сохраняет текущую настройку, в то время как LoadMDIState восстанавливает это. В документации также объясняется, как сохранить положение и размер самого окна фрейма, если вы тоже этого хотите.
Обычно это достигается путем сохранения текущего состояния приложения в каком-то постоянном хранилище. В зависимости от вашей архитектуры это может быть локальный файл конфигурации (xml, json и т. Д.), Хранящийся в каталоге профиля пользователя Windows (вы также можете использовать реестр Windows), удаленное хранилище, такое как база данных, или, возможно, такое состояние может храниться в облачном хранилище. Все зависит от того, как приложение в настоящее время обрабатывает конфигурацию и насколько универсально вы хотите сделать состояние хранилища.
Вы захотите внедрить какую-нибудь историю или историю состояний пользовательского интерфейса. Хранение открытых в данный момент окон и их местоположения, когда они загружены, закрыты и перемещены. Добавьте трекер истории в каждый созданный дочерний объект MDI. Это может быть одноэлементный тип в родителе MDI. Он должен иметь возможность поиска окна по его дескриптору и должен хранить соответствующую информацию в структуре, которая имеет смысл для сериализации. В каждое из вышеупомянутых событий добавляйте звонки в трекер с соответствующими изменениями. Трекер должен сохраняться в соответствии с любыми правилами, которые вы определите.
Затем процесс загрузки требует, чтобы родительский MDI запросил трекер после того, как он инициализировался с тем, что когда-либо сохраненное состояние существовало. Используя сохраненную информацию (тип и местоположение окна (и данные?)), Родительский элемент MDI открывает соответствующих дочерних элементов в соответствующих местах.