MFC DockablePane не плавает и не скрывается

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

В основном я хочу иметь 3 панели в окне, которые могут изменять свои горизонтальные размеры, но не их положение внутри окна. Любое предложение?


person melculetz    schedule 22.01.2009    source источник


Ответы (3)


Решение состоит в том, чтобы расширить CDockablePane и переопределить в этом классе следующие события:

virtual BOOL CanFloat() const;
virtual BOOL CanBeClosed() const;
virtual BOOL CanAutoHide() const;

так что они вернут ЛОЖЬ;

для получения дополнительной информации см. Советы по настройке MSDN для расширений MFC

person melculetz    schedule 02.02.2009
comment
Спасибо за ответ, мне тоже помогло. Всего один комментарий: переопределите также CanBeAttached (), если вы не хотите присоединять к этой вкладке другие вкладки: ‹pre› virtual BOOL CanBeAttached () const {return FALSE;} ‹/pre› Странная вещь: если ваша функция CanBeClosed () возвращает FALSE, кнопка [x] (закрыть) не будет отображаться для этой вкладки. НО! Если вкладка соединена с другой вкладкой, которую можно закрыть, кнопка [x] будет закрыта для обеих вкладок, и можно будет закрыть обе вкладки. Поэтому, если у вас есть вкладки со смешанным поведением, их не следует прикреплять друг к другу. - person Mar; 28.07.2009

Попробуйте изменить dwControlBarStyle при создании окна (с помощью CDockablePane :: Create).

person user60280    schedule 29.01.2009
comment
единственное значение, которое я нашел, - это значение по умолчанию, это AFX_DEFAULT_DOCKING_PANE_STYLE ... есть ли другие? - person melculetz; 29.01.2009
comment
AFX_DEFAULT_DOCKING_PANE_STYLE - это комбинация стилей (AFX_CBRS_FLOAT, AFX_CBRS_CLOSE, AFX_CBRS_RESIZE и AFX_CBRS_AUTOHIDE). Полный список находится в afxbasepane.h. Просто 'или' вместе стили, которые вы хотите для своей панели. - person user60280; 06.02.2009

Другое решение - просто позвонить

CBasePane::SetControlBarStyle(AFX_CBRS_RESIZE|AFX_CBRS_CLOSE);
person Shallyee    schedule 10.10.2011
comment
Не могли бы вы добавить дополнительную информацию о том, как это решает проблему или где позвонить? - person mrk; 10.11.2012
comment
Устанавливая стиль панели управления на AFX_CBRS_RESIZE и AFX_CBRS_CLOSE, вы пропускаете стиль AFX_CBRS_FLOAT, эффективно удаляя стиль и, следовательно, предотвращая перемещение панели. - person akame; 04.05.2015