2013-12-17 127 views
1

我開始了一個單一文檔MFC項目,並創建了兩個CDockablePane
我遇到的問題是,如果我移動或調整窗格大小並退出程序,它們的佈局在重新啓動程序時不會重置。他們的佈局保持不變。重新啓動程序後,CDockablePane不會重新調整大小

我猜我要麼做錯了什麼,或者有一些由Visual Studio生成的代碼,我沒有找到。

CMainFrame::OnCreate功能:

// Headers... 

#define IDC_MYPANE_1 100 
#define IDC_MYPANE_2 101 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    // A lot of pre-generated code... 

    if (this->InitMyPane1() == FALSE) { 
     return -1 ; 
    } 

    if (this->InitMyPane2() == FALSE) { 
     return -1 ; 
    } 

    return 0; 
} 

我的面板初始化函數:

BOOL CMainFrame::InitMyPane1() 
{ 
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT | CBRS_FLOAT_MULTI ; 

    BOOL bOk = m_MyPane1.Create (
     _T ("MyPane 1"), this, 
     CRect (0, 0, 100, 300), TRUE, IDC_MYPANE_1, dwStyle 
    ) ; 

    if (bOk == FALSE) { 
     return FALSE ; 
    } 

    m_MyPane1.EnableDocking (CBRS_ALIGN_ANY) ; 
    this->DockPane ((CBasePane *) &m_MyPane1, AFX_IDW_DOCKBAR_LEFT) ; 
    this->RecalcLayout() ; 

    return bOk ; 
} 

BOOL CMainFrame::InitMyPane2() 
{ 
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT | CBRS_FLOAT_MULTI ; 

    BOOL bOk = m_MyPane2.Create (
     _T ("MyPane 2"), this, 
     CRect (0, 0, 200, 300), TRUE, IDC_MYPANE_2, dwStyle 
    ) ; 

    if (bOk == FALSE) { 
     return FALSE ; 
    } 

    m_MyPane2.EnableDocking (CBRS_ALIGN_ANY) ; 
    m_MyPane2.DockToWindow (&m_MyPane1, CBRS_ALIGN_RIGHT) ; 

    this->RecalcLayout() ; 

    return bOk ; 
} 

OnCreateOnSize功能MyPane1

int MyPane1::OnCreate (LPCREATESTRUCT lp) 
{ 
    if (CDockablePane::OnCreate (lp) == -1) { 
     return -1 ; 
    } 

    // Creates a CListCtrl for this pane (I have a member CListCtrl.) 
    return this->CreateCListCtrl() ; 
} 

void MyPane1::OnSize (UINT nType, int cx, int cy) 
{ 
    CDockablePane::OnSize (nType, cx, cy) ; 

    CRect rect ; 
    this->GetClientRect (&rect) ; 

    m_MyList.SetWindowPos 
     (NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE) ; 

    m_MyList.SetColumnWidth (0, LVSCW_AUTOSIZE) ; 
    m_MyList.SetColumnWidth (1, LVSCW_AUTOSIZE_USEHEADER) ; 
} 

OnCreateOnSize個功能MyPane2

int MyPane2::OnCreate (LPCREATESTRUCT lp) 
{ 
    if (CDockablePane::OnCreate (lp) == -1) { 
     return -1 ; 
    } 

    // Creates a CListCtrl for this pane (I have a member CListCtrl.) 
    return this->CreateCListCtrl() ; 
} 

void MyPane2::OnSize (UINT nType, int cx, int cy) 
{ 
    CDockablePane::OnSize (nType, cx, cy) ; 

    CRect rect ; 
    this->GetClientRect (&rect) ; 

    m_MyList.SetWindowPos 
     (NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE) ; 

    m_MyList.SetColumnWidth (0, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (1, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (2, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (3, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (4, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (5, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (6, LVSCW_AUTOSIZE_USEHEADER) ; 
    m_MyList.SetColumnWidth (7, LVSCW_AUTOSIZE_USEHEADER) ; 
} 

回答

相關問題