1

在 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 和 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 的正确高度。尽管这在整个应用程序生命周期中都有效,但在应用程序存在并再次打开时无效。

4

0 回答 0