在MFC应用程序中,我有两个派生的CDockablePane窗格对象停靠在主视图的任一侧。
以下是创建其中一个窗格的代码。第二个是类似的。
if(m_dlgPane && m_dlgPane->GetSafeHwnd())
{
m_dlgPane->ShowPane(TRUE,FALSE,TRUE);
//RecalcLayout();
return ;
}
m_dlgPane = new CDialogPane;
((CDialogPane*)m_dlgPane)->m_wndDlg = new CPaneChildDlg();
((CDialogPane*)m_dlgPane)->nDlgID = CPaneChildDlg::IDD;
UINT style = WS_CHILD | CBRS_RIGHT | CBRS_FLOAT_MULTI;
CString strTitle = _T("Child Dialog Pane");
if (!m_dlgPane->Create(strTitle, this, CRect(0, 0, 300, 400), TRUE,
IDC_DIALOG_PANE, style,AFX_CBRS_OUTLOOK_TABS))
{
TRACE0("Failed to create dialog pane\n");
SAFE_DELETE(m_dlgPane);
return ;
}
m_dlgPane->EnableDocking(CBRS_ALIGN_ANY);
DockPane((CBasePane*)m_dlgPane,AFX_IDW_DOCKBAR_RIGHT);
m_dlgPane->ShowPane(TRUE, FALSE, TRUE);
m_dlgPane->RecalcLayout();
通过LoadState& amp;窗口保存布局。 SaveState方法。并且由框架调用。
BOOL CDialogPane::SaveState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
return CDockablePane::SaveState(lpszProfileName, nIndex, uiID);
}
BOOL CDialogPane::LoadState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
return CDockablePane::LoadState(lpszProfileName, nIndex, uiID);
}
每次应用程序启动时都会正确加载布局。除了一个窗格(Pane2)停靠到另一个窗格(Pane1)时。似乎它没有记住或加载Pane2的正确高度。虽然这适用于整个应用程序生命周期,但不适用于应用程序存在并再次打开