Objective Toolkit : Chapter 21 Advanced Docking Windows : Advanced Docking Windows Features
Advanced Docking Windows Features
The sections that follow provide descriptions of specific features of the Advanced Docking Windows architecture.
Docking Inside an MDI Child Frame
One of the strengths of the docking architecture is that the core docking logic is not tied to a specific parent window. This allows you to plug the docking mechanism into any container window transparently, including frames, dialogs, and generic CWnds without modifying the existing architecture.
Objective Toolkit includes an external interface for hooking into frame window docking.
You can apply our docking logic to any CFrameWnd derived object, including CMDIFrameWnd, CMDIChildWnd, SECFrameWnd, SECMDIFrameWnd, SECWorkbookWnd, and more. Note that the ADW architecture does not require the usage of the Stingray SEC docking frame classes (SECFrameWnd, SECMDIFrameWnd). This enables you to create a framework with a light footprint. In addition, note that you can apply the docking logic to a MDI child frame window.
Floating MultiDock Mode
Another new feature of this architecture is the floating frame MultiDock capability. This feature allows you to dock more than one dockable node inside the same floating window and then re-dock that entire floating window as one entity.
Realtime Drag Mode
ADW also supports realtime Office-Style drag-and-drop for toolbars. When you have this feature enabled, the contents of a docking operation are updated when the end-user presses the mouse button and drags. In other words, when the end-user presses the mouse button and then drags, he moves the toolbar not a prediction rectangle.
For information on implementing this feature, see “To use ‘real-time’ drag mode”.
Alternate Border Layout Logic
By default, the top and bottom borders receive precedence over the left and right borders. For example, the top and bottom borders always occupy the entire available client width, and the left and right borders shrink to accommodate the height between the top and bottom borders. This mode is configurable so that the left and right borders can receive priority over the top and bottom.
For information on implementing this feature, see “To use alternate border layout logic.”
Advanced Docking Configurations
This section describes some of the advanced configuration options available in the Advanced Docking Windows architecture and how to the implement or disable these features.
You can use the SECDockInsertionConstraints insertion constraints object in conjunction with SECFrameDockingFeature::DockNode() to create advanced docking configurations. This mechanism allows reuse of similar constraints across multiple insertions easily. In addition, the relative insertion constraints are automatically updated to reflect the last insertion at each docking call.
The following table lists some of the primary members of SECDockInsertionConstraints. For a comprehensive list, please refer to the Objective Toolkit Class Reference.
Table 50 – SECDockInsertionConstraints class members 
Member
Description
SECLayoutNode* m_pNodeRelative
Docking occurs relative to this node pointer.
BOOL m_bInsertAfter
If TRUE, newly docked node is positioned after m_pNodeRelative, else before.
Void SetInsertPosition(UINT nPos,BOOL bAfter=TRUE,BOOL bPrimaryCnstr=TRUE);
Alternative to m_pNodeRelative. If you use this mechanism, a caller can specify a positional index, instead of a concrete relative node pointer. If the position is out of range, it is truncated within the target grid’s cell bound. If bPrimaryCnstr is FALSE, this mechanism is only used as a backup when m_pNodeRelative cannot be located.
BOOL m_bCreateNewLine
If TRUE, a new line is created for the newly docked node, instead of positioning relative on an existing line.
BOOL m_bDynamicNode
If FALSE, docked node is not bounded by sizing splitters. Note that the parent grid row/column to which it belongs can still have sizing splitters. See SetBorderSizing.
Int m_nForcedSize
Allows specification of a specific size for the newly inserted node instead of “best fit” insertion.
Int m_nForcedNewLineSize
If a new line is created (m_bCreateNewLine==TRUE), then this value specifies the line size.
Void SetDockSite(DWORD dwDockSite)
Allows specification of the dock site via SEC_DOCK_* parameters.
Void SetDockSite(SECFrameDockingFeatureBase::DockSite site)
Allows specification of the dock site via SECFrameDockingFeatureBase::top, bottom, left, or right.
 
For information on using docking insertion constraints, “To use docking insertion constraints.”