Splitter window
i have a reference code.there is a main splitter view. There are two
panes (2 columns, 1 row).The left pane is a tree view, the right pane
is itself a splitter view.X column is set upon creation of the view.
This way the user can move the splitter bar to how they like it and
still resize the frame window without it snapping back.and
RecalcLayout() is called after that to correctly redisplay the
splitter window after adjusting row and column sizes with the
SetRowInfo and SetColumnInfo member functions.so when i click on some
button to view the particular form, the splitter window is resizing and
i have to move the splitter bar to view the particular form.how can i
avoid this?i tried commenting RecalcLayout() function.but it doesnt
display anything.
the code is given below
int CSplitterView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//Create the main splitter view. There are two panes (2 columns, 1
row).
//The left pane is a tree view, the right pane is itself a splitter
view.
m_wndSplitter.CreateStatic(this, 1,2);
CCreateContext *pContext =
(CCreateContext*)lpCreateStruct->lpCreateParams;
lpCreateStruct->style |= WS_OVERLAPPED;
//m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView), CSize(0,0),
pContext);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CFormView1), CSize(0,0),
pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CForm_View11), CSize(0,0),
pContext);
m_pWndSplitter = &m_wndSplitter;
((CMainFrame*)GetParentFrame())->m_pNewView = this; // could also use
AfxGetMainWnd()
return 0; // OnCreate must return 0 to continue the creation of the
CWnd object
}
//////////////////////////////////////////////////////////////////////
void CSplitterView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
//m_wndSplitter.MoveWindow(0, 0, cx, cy);
m_wndSplitter.MoveWindow(0,0, cx, cy);
//We just want to set the X column upon creation of the view. This way
the user can
//move the splitter bar to how they like it and still resize the frame
window
//without it snapping back:
if(m_bShouldSetXColumn)
m_wndSplitter.SetColumnInfo(0, cx/1-200, 0);
m_wndSplitter.RecalcLayout();
}
BOOL CMySplitterWnd::ReplaceView(CRuntimeClass* pRTClass)
{
TRACE("inside CMySplitterWnd::ReplaceView\n");
//GetParentFrame()->GetActiveDocument() won't work here,
//because at times, there is no active view:
CResumerDoc* pDoc = ((CResumerApp*)AfxGetApp())->m_pDoc;
if(!pDoc) //most likely a problem reading in file
{
AfxMessageBox("There was a problem reading the file, please open
another one.");
return FALSE;
}
//CWnd* pWndRightPane = GetPane(0,0);
CWnd* pWndRightPane = GetPane(0,0);
if(pWndRightPane->IsKindOf(pRTClass))
return FALSE; //View is already selected, so don't need to destroy
it
//and then create it again.
//Set flag so that document will not be deleted when view is
destroyed.
//m_bAutoDelete is a non-documented member of CDocument.
pDoc->m_bAutoDelete = FALSE;
//Delete old view:
pWndRightPane->DestroyWindow();
//Create new view:
CCreateContext context;
context.m_pNewViewClass = pRTClass;
context.m_pCurrentDoc = pDoc;
context.m_pNewDocTemplate = NULL;
context.m_pLastView = NULL;
context.m_pCurrentFrame = NULL;
CreateView(0,0, pRTClass, CSize(0,0), &context);
CView* pNewView = (CView*)GetPane(0,0);
RecalcLayout();
pNewView->OnInitialUpdate();
pNewView->SendMessage(WM_PAINT);
return TRUE;
}