Docking Pane

//CMainFrame.h
public:
    CXTPDockingPaneManager m_paneManager;

//resource
IDR_PANE_OPTIONS       61446    Options
IDR_PANE_PROPERTIES    61447    Properties

//CMainFrame.cpp, CMainFrame::OnCreate: 
// Initialize the docking pane manager and set the
// initial them for the docking panes.  Do this only after all
// control bars objects have been created and docked.
m_paneManager.InstallDockingPanes(this);
m_paneManager.SetTheme(xtpPaneThemeOffice);

// Create docking panes.
CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane(IDR_PANE_OPTIONS, CRect(0, 0,200, 120), xtpPaneDockLeft);
CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), xtpPaneDockBottom, pwndPane1);

Attach controls to pane

//CMainFrame.h
public:
	CStatic m_wndOptions;
	CEdit m_wndProperties;

afx_msg LRESULT OnDockingPaneNotify(WPARAM wParam, LPARAM lParam);

//CMainFrame.cpp
ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify)

LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam)
{
	if (wParam == XTP_DPN_SHOWWINDOW)
	{
		CXTPDockingPane* pPane = (CXTPDockingPane*)lParam;

		if (!pPane->IsValid())
		{
			switch (pPane->GetID())
			{
			case IDR_PANE_PROPERTIES:
				{
					if (m_wndProperties.GetSafeHwnd() == 0)
					{
						m_wndProperties.Create(WS_CHILD|
							ES_AUTOVSCROLL|ES_MULTILINE,
							CRect(0, 0, 0, 0), this, 0);
					}
					pPane->Attach(&m_wndProperties);
					break;
				}
			case IDR_PANE_OPTIONS:
				{
					if (m_wndOptions.GetSafeHwnd() == 0)
					{
						m_wndOptions.Create(_T("\n\nOptions"),
							WS_CHILD|WS_CLIPCHILDREN|
							WS_CLIPSIBLINGS|SS_CENTER,
							CRect(0, 0, 0, 0), this, 0);
					}
					pPane->Attach(&m_wndOptions);
					break;
				}
			}
		}
		return TRUE;
	}
	return FALSE;
}

Icon

Create Bitmap with icons for created panes, Bitmap的大小为1616count,其中1616为icon的大小,count为icon的数量,比如如果只有两个icon,那么大小为1632。宽度必须为16的倍数,且倍数为icon的数量,如果不一致,程序加载时会报错,暂不清楚报错原因。

int nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES};
m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons, _countof(nIDIcons), RGB(0, 255, 0));

Save and Load State Handlers

//MainFrm.h 
 	afx_msg void OnClose();

//MainFrm.cpp 
ON_WM_CLOSE()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	...

	// Load the previous state for docking panes.
	CXTPDockingPaneLayout layoutNormal(&m_paneManager);
	if (layoutNormal.Load(_T("NormalLayout")))
	{
		m_paneManager.SetLayout(&layoutNormal);
	}
	return 0;
}

void CMainFrame::OnClose()
{
	// Save the current state for docking panes.
	CXTPDockingPaneLayout layoutNormal(&m_paneManager);
	m_paneManager.GetLayout(&layoutNormal);
	layoutNormal.Save(_T("NormalLayout"));
	CMDIFrameWnd::OnClose();
}