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 ;
}
我OnCreate
和OnSize
功能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) ;
}
我OnCreate
和OnSize
個功能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) ;
}