Я работаю над проектом, который полностью не хочет использовать встроенный window/dock
сохранение состояния и положения MFC
, Это означает, что в моем основном кадре я установил EnableLoadDockState(FALSE)
, Столько, сколько я люблю, чтобы изменить это обратно на ИСТИНА, я не могу.
Я планирую получить позицию, где CDockablePane
был пристыкован onAfterDock()
из моего CDockablePane
, Моя проблема в том, что я понятия не имею, как получить, был ли он расположен сбоку, сверху или снизу, на другом CDockablePane
,
Есть ли способ получить эту информацию?
Спасибо!
Я думаю, что есть способ получить его, но он не будет легким или красивым.
А ты ловишь OnAfterDock
Я думаю, вы не заинтересованы в плавающих панелях. Таким образом, для закрепленных панелей вы можете использовать CDockablePane::GetDefaultPaneDivider
(MSDN здесь), который возвращает — как MSDN говорит:
Действительный
CPaneDivider
объект, если присоединяемая панель пристыкована к окну основного фрейма, или NULL, если присоединяемая панель не пристыкована или если она плавающая.
CPaneDivider
объект (MSDN здесь)
…разделяет две панели, разделяет две группы панелей или отделяет группу панелей от клиентской области окна основного фрейма
Следующий частичный скриншот говорит больше:
Таким образом, для обычного делителя панели вы можете использовать методы, доступные на CPaneDivider
найти другую панель или другую встроенную CPaneDivider
(поэтому здесь необходим рекурсивный опрос) и проверьте, является ли разделитель горизонтальным или вертикальным и т. д.
Для другого случая, описанного выше, посмотрите на CPaneContainerManager
класс, который (опять как говорит MSDN)
…управляет хранением и отображением текущей раскладки
Отсюда вы можете снова развернуть всю иерархию стыковки, которая начинается с исходной закрепленной панели.
Если бы я был тобой, я бы действительно снова посмотрел на использование EnableLoadDockState
или, по крайней мере, просмотрите исходный код MFC, чтобы увидеть, есть ли какие-нибудь внутренние вспомогательные классы / функции, которые вы можете использовать повторно.
Я только что решил эту проблему. Я могу проверить CDockablePane
«s dwStyle
(GetPaneStyle()
) за CBRS_ALIGN_LEFT
, CBRS_ALIGN_RIGHT
и т. д. Нет сложных методов. Просто.