views:

677

answers:

2

Is there any way to make a MFC DockablePane (from the new Feature Pack) that is docked in a window not able to float or to hide (and even disable the context menu that allows the user to select the states - dockable, float, hide etc.)

What I basically want is to have 3 panes on a window that can change their horizontal dimensions, but not their position inside the window. Any suggestion?

+1  A: 

Try changing the dwControlBarStyle when you create the window (with CDockablePane::Create).

the only value I found is the default one, which is AFX_DEFAULT_DOCKING_PANE_STYLE ... are there any other?
melculetz
AFX_DEFAULT_DOCKING_PANE_STYLE is a combination of styles (AFX_CBRS_FLOAT, AFX_CBRS_CLOSE, AFX_CBRS_RESIZE, and AFX_CBRS_AUTOHIDE). The full list is in afxbasepane.h. Just 'or' together the styles you want for your pane.
+1  A: 

The solution is to extend the CDockablePane and override in this class the following events:

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

so that they return FALSE;

for more information see MSDN Customization Tips for the MFC Extensions

melculetz
Thanks for the answer, it helped me as well.Just one comment:Override also CanBeAttached() if you do not want to attach other tabs to this one:<pre>virtual BOOL CanBeAttached() const {return FALSE;}</pre>A strange thing: if your CanBeClosed() function returns FALSE, the [x] (close) button will not be shown for this tab. BUT! If the tab is attached with another one that can be closed, the [x] button will be closed for both tabs and it will be possible to close both tabs. So if you have 'mixed behavior' tabs, they should not be attached one to another.
Mar