A questioin on splitting frame
Dennis W. Tan -- dennis@ny.amarex.com Thursday, October 31, 1996 Environment: VC++ 4.2-flat, Win 95 In one of my recent projects, I have created a two way static splitting frame. Is there a way to close or reopen one of panes just by clicking a menu item ? Any help would be appreciated. Dennis W. Tan Software Engineer
Robert Somrek -- Robert.Somrek@noaa.gov Sunday, November 03, 1996 [Mini-digest: 2 responses] Dennis, I have two views and allow the user to split them from the View menu or toolbar (all options are mapped to this code -- whole map view, whole edit view, 50/50 split) with the following code: void CMyMDIFrame::OnViewView(UINT nID) { CRect rcClient; if (nID == ID_VIEW_MAP) ActivateView(RUNTIME_CLASS(CMyMapView)); else if (nID == ID_VIEW_EDITOR) ActivateView(RUNTIME_CLASS(CMyEditView)); CMyMDIChild* pMDIChildWnd = (CMyMDIChild*)MDIGetActive(); CSplitterWnd* pSplitterWnd = pMDIChildWnd->GetSplitterWnd(); pSplitterWnd->GetClientRect(rcClient); pSplitterWnd->SetColumnInfo(nID == ID_VIEW_MAP ? 0 : 1, nID != ID_VIEW_SPLIT ? rcClient.right : rcClient.right / 2, 1); pSplitterWnd->SetColumnInfo(nID == ID_VIEW_MAP ? 1 : 0, nID != ID_VIEW_SPLIT ? 1 : rcClient.right / 2, 1); pSplitterWnd->RecalcLayout(); } This code leaves the splitter bar "parked" along the side of the view; the view is not completely hidden. Bob Somrek ______________________________ Reply Separator _________________________________ Subject: A questioin on splitting frame Author: dennis@ny.amarex.com at EXTERNAL Date: 11/2/96 3:05 AM Environment: VC++ 4.2-flat, Win 95 In one of my recent projects, I have created a two way static splitting frame. Is there a way to close or reopen one of panes just by clicking a menu item ? Any help would be appreciated. Dennis W. Tan Software Engineer -----From: "Doug Brubacher"Dennis, Try using CSplitterWnd::SetColumnInfo( int col, int cxIdeal, int cxMin ) by setting the cxMin value > then the current size and the cxIdeal size you can indicate that the pane can not be displayed because there is not enough room (by making cxMin > the screen size you can ensure the user can never resize the splitter window to see the pane). Conversely set cxMin <= cxIdeal to redisplay the pane. In both cases call CSplitterWnd::RecalcLayout() after you call to SetColumnInfo(). Note the following from the MFC documentation: "void RecalcLayout( ); Remarks Call this member function to correctly redisplay the splitter window after you have adjusted row and column sizes with the SetRowInfo and SetColumnInfo member functions. If you change row and column sizes as part of the creation process before the splitter window is visible, it is not necessary to call this member function. The framework calls this member function whenever the user resizes the splitter window or moves a split." Regards Doug Brubacher DouglasB@msn.com
| Вернуться в корень Архива |