Получение области док-станции, где была пристыкована MFC CDockablePane

Я работаю над проектом, который полностью не хочет использовать встроенный window/dock сохранение состояния и положения MFC, Это означает, что в моем основном кадре я установил EnableLoadDockState(FALSE), Столько, сколько я люблю, чтобы изменить это обратно на ИСТИНА, я не могу.

Я планирую получить позицию, где CDockablePane был пристыкован onAfterDock() из моего CDockablePane, Моя проблема в том, что я понятия не имею, как получить, был ли он расположен сбоку, сверху или снизу, на другом CDockablePane,

Есть ли способ получить эту информацию?

Спасибо!

3

Решение

Я думаю, что есть способ получить его, но он не будет легким или красивым.

А ты ловишь OnAfterDockЯ думаю, вы не заинтересованы в плавающих панелях. Таким образом, для закрепленных панелей вы можете использовать CDockablePane::GetDefaultPaneDivider (MSDN здесь), который возвращает — как MSDN говорит:

Действительный CPaneDivider объект, если присоединяемая панель пристыкована к окну основного фрейма, или NULL, если присоединяемая панель не пристыкована или если она плавающая.

CPaneDivider объект (MSDN здесь)

…разделяет две панели, разделяет две группы панелей или отделяет группу панелей от клиентской области окна основного фрейма

Следующий частичный скриншот говорит больше:

cpanedivider

Таким образом, для обычного делителя панели вы можете использовать методы, доступные на CPaneDivider найти другую панель или другую встроенную CPaneDivider (поэтому здесь необходим рекурсивный опрос) и проверьте, является ли разделитель горизонтальным или вертикальным и т. д.

Для другого случая, описанного выше, посмотрите на CPaneContainerManager класс, который (опять как говорит MSDN)

…управляет хранением и отображением текущей раскладки

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

Если бы я был тобой, я бы действительно снова посмотрел на использование EnableLoadDockState или, по крайней мере, просмотрите исходный код MFC, чтобы увидеть, есть ли какие-нибудь внутренние вспомогательные классы / функции, которые вы можете использовать повторно.

3

Другие решения

Я только что решил эту проблему. Я могу проверить CDockablePane«s dwStyle (GetPaneStyle()) за CBRS_ALIGN_LEFT, CBRS_ALIGN_RIGHTи т. д. Нет сложных методов. Просто.

3

По вопросам рекламы [email protected]