当CDockablePane停靠在另一个窗格时,它不会保存布局

时间:2015-01-13 11:08:42

标签: visual-c++ layout mfc panel dockable

在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的正确高度。虽然这适用于整个应用程序生命周期,但不适用于应用程序存在并再次打开

0 个答案:

没有答案