|
|
//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose: Implements the MDI child window. Each MDI child window contains one
// or more views. If it contains more than one view, there is a splitter
// seperating the views. All views in a given MDI child window reflect
// a single document.
//
//===========================================================================//
#include "stdafx.h"
#include <oleauto.h>
#include <oaidl.h>
#if _MSC_VER < 1300
#include <afxpriv.h>
#else
#define WM_INITIALUPDATE 0x0364 // (params unused) - sent to children
#endif
#include "hammer.h"
#include "Options.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "MapDoc.h"
#include "MapView2D.h"
#include "MapViewLogical.h"
#include "MapView3D.h"
#include "GlobalFunctions.h"
#include "materialdlg.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CChildFrame)
ON_WM_SETFOCUS() ON_WM_SIZE() ON_WM_CREATE() ON_WM_PAINT() ON_WM_CLOSE() ON_COMMAND(ID_VIEW_2DXY, OnView2dxy) ON_COMMAND(ID_VIEW_2DYZ, OnView2dyz) ON_COMMAND(ID_VIEW_2DXZ, OnView2dxz) ON_COMMAND(ID_VIEW_2DLOGICAL, OnViewLogical) ON_COMMAND(ID_VIEW_3DPOLYGON, OnView3dPolygon) ON_COMMAND(ID_VIEW_3DTEXTURED, OnView3dTextured) ON_COMMAND(ID_VIEW_3DTEXTURED_SHADED, OnView3dTexturedShaded) ON_COMMAND(ID_VIEW_LIGHTINGPREVIEW, OnView3dLightingPreview) ON_COMMAND(ID_VIEW_LIGHTINGPREVIEW_RAYTRACED, OnView3dLightingPreviewRayTraced) ON_COMMAND(ID_VIEW_3DLIGHTMAP_GRID, OnView3dLightmapGrid) ON_COMMAND(ID_VIEW_3DWIREFRAME, OnView3dWireframe) ON_COMMAND(ID_VIEW_3DSMOOTH, OnView3dSmooth) //ON_COMMAND(ID_VIEW_3DENGINE, OnView3dEngine)
ON_COMMAND(ID_VIEW_AUTOSIZE4, OnViewAutosize4) ON_UPDATE_COMMAND_UI(ID_VIEW_AUTOSIZE4, OnUpdateViewAutosize4) ON_COMMAND(ID_VIEW_MAXIMIZEPANE, OnViewMaximizepane) ON_UPDATE_COMMAND_UI(ID_VIEW_MAXIMIZERESTOREACTIVEVIEW, OnUpdateViewMaximizepane) ON_COMMAND(ID_WINDOW_TOGGLE, OnWindowToggle) ON_COMMAND(ID_VIEW_MAXIMIZERESTOREACTIVEVIEW, OnViewMaximizepane) ON_WM_DESTROY() //}}AFX_MSG_MAP
END_MESSAGE_MAP()
static BOOL g_b4Views = TRUE;
//-----------------------------------------------------------------------------
// Purpose:
// Input : b4Views -
//-----------------------------------------------------------------------------
void SetDefaultChildType(BOOL b4Views) { g_b4Views = b4Views; }
//-----------------------------------------------------------------------------
// Purpose: Constructor. Initializes data members.
//-----------------------------------------------------------------------------
CChildFrame::CChildFrame(void) { m_bReady = FALSE; bAutosize4 = TRUE; bFirstPaint = TRUE; bUsingSplitter = !g_b4Views ? FALSE : !Options.general.bIndependentwin; m_wndSplitter = NULL; m_bNeedsCentered = FALSE; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CChildFrame::~CChildFrame(void) { if (m_wndSplitter != NULL) { m_wndSplitter->DestroyWindow(); delete m_wndSplitter; } }
//-----------------------------------------------------------------------------
// Purpose:
// Input : cs -
// Output : Returns TRUE on success, FALSE on failure.
//-----------------------------------------------------------------------------
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) { //cs.style |= WS_MAXIMIZE;
return(CMDIChildWnd::PreCreateWindow(cs)); }
//-----------------------------------------------------------------------------
// Purpose:
// Input :
// Output : CView *
//-----------------------------------------------------------------------------
CView * CChildFrame::GetActiveView() { // find active pane in splitter wnd and replace it there
int iRow, iCol; CView *pCurrentView;
if(bUsingSplitter) { m_wndSplitter->GetActivePane(&iRow, &iCol);
// If no active view for the frame, return FALSE because this
// function retrieves the current document from the active view.
if ((pCurrentView= (CView*) m_wndSplitter->GetPane(iRow, iCol))==NULL) return NULL; } else { pCurrentView = CMDIChildWnd::GetActiveView(); }
return pCurrentView; }
//-----------------------------------------------------------------------------
// Purpose:
// Input : bSplitter -
//-----------------------------------------------------------------------------
void CChildFrame::SetSplitterMode(BOOL bSplitter) { if(bSplitter == bUsingSplitter) return; // already at this mode
if(!bSplitter) { // delete the splitterwnd.. first, get the view that it is currently
// using.
CView * pActiveView = GetActiveView(); CDocument* pDoc = pActiveView->GetDocument();
BOOL bAutoDelete=pDoc->m_bAutoDelete; pDoc->m_bAutoDelete=FALSE;
pActiveView->SetRedraw(FALSE); m_wndSplitter->SetRedraw(FALSE); pActiveView->SetParent(this);
m_wndSplitter->DestroyWindow(); delete m_wndSplitter; m_wndSplitter = NULL;
pDoc->m_bAutoDelete = bAutoDelete;
// redraw active view
CRect r; GetClientRect(r); pActiveView->SetRedraw(TRUE); pActiveView->MoveWindow(0, 0, r.right, r.bottom, TRUE); } else { CView * pActiveView = GetActiveView(); Assert(pActiveView); CMapDoc* pDoc = (CMapDoc*) pActiveView->GetDocument();
BOOL bAutoDelete=pDoc->m_bAutoDelete; pDoc->m_bAutoDelete=FALSE; pActiveView->DestroyWindow(); pDoc->m_bAutoDelete = bAutoDelete;
// creating new four views.
m_wndSplitter = new CMySplitterWnd; if(!m_wndSplitter->CreateStatic(this, 2, 2)) { TRACE0("Failed to create split bar "); return; // failed to create
}
CRect r; GetClientRect(r); CSize sizeView(r.Width()/2 - 3, r.Height()/2 - 3);
CCreateContext context; context.m_pNewViewClass = NULL; context.m_pCurrentDoc = pDoc; context.m_pNewDocTemplate = NULL; context.m_pLastView = NULL; context.m_pCurrentFrame = this;
context.m_pNewViewClass = RUNTIME_CLASS(CMapView2D); m_wndSplitter->CreateView(0, 1, RUNTIME_CLASS(CMapView2D), sizeView, &context); m_wndSplitter->CreateView(1, 0, RUNTIME_CLASS(CMapView2D), sizeView, &context); m_wndSplitter->CreateView(1, 1, RUNTIME_CLASS(CMapView2D), sizeView, &context);
context.m_pNewViewClass = RUNTIME_CLASS(CMapView3D);
m_wndSplitter->CreateView(0, 0, context.m_pNewViewClass, sizeView, &context); }
bUsingSplitter = bSplitter; }
//-----------------------------------------------------------------------------
// Purpose: Replaces the current active view with a given view type.
// Input : *pViewClass -
// Output : CView
//-----------------------------------------------------------------------------
CView *CChildFrame::ReplaceView(CRuntimeClass *pViewClass) { //
// Verify that there is an active view to replace.
//
CView *pCurrentView = GetActiveView(); if (!pCurrentView) { return(NULL); } //
// If we're already displaying this kind of view, no need to go
// further.
//
if ((pCurrentView->IsKindOf(pViewClass)) == TRUE) { return(pCurrentView); } //
// Get pointer to CDocument object so that it can be used in the
// creation process of the new view. Set flag so that the document
// will not be deleted when view is destroyed.
//
CMapDoc *pDoc = (CMapDoc *)pCurrentView->GetDocument(); BOOL bAutoDelete = pDoc->m_bAutoDelete; pDoc->m_bAutoDelete=FALSE;
int iRow = 0, iCol = 0; CRect rect;
// Delete existing view
if (bUsingSplitter) { pCurrentView->GetClientRect(rect); m_wndSplitter->GetActivePane(&iRow, &iCol); m_wndSplitter->DeleteView(iRow, iCol); } else { pCurrentView->DestroyWindow(); }
// Restore the autodelete flag.
pDoc->m_bAutoDelete = bAutoDelete; // Create new view and redraw.
CCreateContext context;
context.m_pNewViewClass = pViewClass; context.m_pCurrentDoc = pDoc; context.m_pNewDocTemplate = NULL; context.m_pLastView = NULL; context.m_pCurrentFrame=this; CView *pNewView = NULL;
if (bUsingSplitter) { if (m_wndSplitter->CreateView(iRow, iCol, pViewClass, rect.Size(), &context)) { pNewView = (CView *)m_wndSplitter->GetPane(iRow, iCol); } } else { pNewView = (CView *)pViewClass->CreateObject(); if (pNewView) { CRect r; GetClientRect(r);
if (!pNewView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, r, this, AFX_IDW_PANE_FIRST, &context)) { pNewView = NULL; } } }
if (!pNewView) { TRACE0("Warning: couldn't create view for frame\n"); return(NULL); } pNewView->SendMessage(WM_INITIALUPDATE, 0, 0);
if (bUsingSplitter) { m_wndSplitter->RecalcLayout(); } return(pNewView); }
#ifdef _DEBUG
//-----------------------------------------------------------------------------
// Purpose:
// Input :
//-----------------------------------------------------------------------------
void CChildFrame::AssertValid() const { CMDIChildWnd::AssertValid(); }
//-----------------------------------------------------------------------------
// Purpose:
// Input : dc -
//-----------------------------------------------------------------------------
void CChildFrame::Dump(CDumpContext& dc) const { CMDIChildWnd::Dump(dc); }
#endif //_DEBUG
//-----------------------------------------------------------------------------
// Purpose: Stores layout information in the registry for use next session.
//-----------------------------------------------------------------------------
void CChildFrame::SaveOptions(void) { if (bUsingSplitter) { //
// Save the draw type for each pane of the splitter.
//
for (int nRow = 0; nRow < 2; nRow++) { for (int nCol = 0; nCol < 2; nCol++) { CMapView *pView = dynamic_cast<CMapView*>(m_wndSplitter->GetPane(nRow, nCol)); if (pView != NULL) { char szKey[30]; sprintf(szKey, "DrawType%d,%d", nRow, nCol); APP()->WriteProfileInt("Splitter", szKey, pView->GetDrawType()); } } }
int nWidth, nHeight, nMin; m_wndSplitter->GetColumnInfo( 0, nWidth, nMin ); m_wndSplitter->GetRowInfo( 0, nHeight, nMin );
APP()->WriteProfileInt( "Splitter", "SplitterWidth", nWidth ); APP()->WriteProfileInt( "Splitter", "SplitterHeight", nHeight );
//
// Save the window position, size, and minimized/maximized state.
//
WINDOWPLACEMENT wp; wp.length = sizeof(wp); GetWindowPlacement(&wp);
char szPlacement[100]; sprintf(szPlacement, "(%d %d) (%d %d) (%d %d %d %d) %d", wp.ptMaxPosition.x, wp.ptMaxPosition.y, wp.ptMinPosition.x, wp.ptMinPosition.y, wp.rcNormalPosition.bottom, wp.rcNormalPosition.left, wp.rcNormalPosition.right, wp.rcNormalPosition.top, wp.showCmd); APP()->WriteProfileString("Splitter", "WindowPlacement", szPlacement); } }
//-----------------------------------------------------------------------------
// Purpose: Calls ReplaceView with the appropriate runtime class information to
// switch the active view to given view type.
// Input : eViewType - 2d xy, xz, 3d textured, flat, etc.
//-----------------------------------------------------------------------------
void CChildFrame::SetViewType(DrawType_t eViewType) { CMapView *pNewView = NULL; switch (eViewType) { case VIEW2D_XY: case VIEW2D_XZ: case VIEW2D_YZ: pNewView = (CMapView2D *)ReplaceView(RUNTIME_CLASS(CMapView2D)); break;
case VIEW_LOGICAL: pNewView = (CMapViewLogical *)ReplaceView(RUNTIME_CLASS(CMapViewLogical)); break;
default: case VIEW3D_WIREFRAME: case VIEW3D_POLYGON: case VIEW3D_TEXTURED: case VIEW3D_TEXTURED_SHADED: case VIEW3D_LIGHTMAP_GRID: case VIEW3D_LIGHTING_PREVIEW2: case VIEW3D_LIGHTING_PREVIEW_RAYTRACED: case VIEW3D_SMOOTHING_GROUP: //case VIEW3D_ENGINE:
pNewView = (CMapView3D *)ReplaceView(RUNTIME_CLASS(CMapView3D)); break; }
if (pNewView != NULL) { SetActiveView( dynamic_cast<CView*>(pNewView->GetViewWnd()) ); pNewView->SetDrawType(eViewType); pNewView->UpdateView( MAPVIEW_UPDATE_OBJECTS ); } }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_2DXY command when the active view is a 3D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView2dxy(void) { SetViewType(VIEW2D_XY); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_2DYZ command when the active view is a 3D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView2dyz(void) { SetViewType(VIEW2D_YZ); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_2DXZ command when the active view is a 3D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView2dxz(void) { SetViewType(VIEW2D_XZ); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_2DLOGICAL command when the active view is a 3D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnViewLogical(void) { SetViewType(VIEW_LOGICAL); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DWIREFRAME command when the active view is a 2D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView3dWireframe(void) { SetViewType(VIEW3D_WIREFRAME); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DPOLYGON command when the active view is a 2D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView3dPolygon(void) { SetViewType(VIEW3D_POLYGON); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DTEXTURED command when the active view is a 2D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView3dTextured(void) { SetViewType(VIEW3D_TEXTURED); }
void CChildFrame::OnView3dTexturedShaded(void) { SetViewType(VIEW3D_TEXTURED_SHADED); }
void CChildFrame::OnView3dLightingPreview(void) { SetViewType(VIEW3D_LIGHTING_PREVIEW2); }
void CChildFrame::OnView3dLightingPreviewRayTraced(void) { SetViewType(VIEW3D_LIGHTING_PREVIEW_RAYTRACED); } //-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DTEXTURED command when the active view is a 2D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView3dLightmapGrid(void) { SetViewType(VIEW3D_LIGHTMAP_GRID); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DSMOOTH command when the active view is a 3D view.
//-----------------------------------------------------------------------------
void CChildFrame::OnView3dSmooth(void) { SetViewType(VIEW3D_SMOOTHING_GROUP); }
//-----------------------------------------------------------------------------
// Purpose: Handles the ID_VIEW_3DENGINE command when the active view is a 2D view.
//-----------------------------------------------------------------------------
//void CChildFrame::OnView3dEngine(void)
//{
// SetViewType(VIEW3D_ENGINE);
//}
//-----------------------------------------------------------------------------
// Purpose: Overloaded to handle the 2x2 splitter. If the splitter is enabled,
// the splitter window is createed and one 3D view and three 2D views
// are added to it.
// Input : lpcs -
// pContext -
// Output : Returns TRUE on success, FALSE on failure.
//-----------------------------------------------------------------------------
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext) { //
// If we are using the splitter, create the splitter and 4 views.
//
if (bUsingSplitter) { m_wndSplitter = new CMySplitterWnd; Assert(m_wndSplitter != NULL); if (m_wndSplitter == NULL) { return(FALSE); }
if (!m_wndSplitter->CreateStatic(this, 2, 2)) { delete m_wndSplitter; m_wndSplitter = NULL; TRACE0("Failed to create split bar "); return(FALSE); } //
// Calculate the size of each view within the splitter,
//
CRect r; GetClientRect(r); CSize sizeView((r.Width() / 2) - 3, (r.Height() / 2) - 3);
//
// Create the 4 views as they were when the user last closed the app.
//
DrawType_t eDrawType[2][2];
eDrawType[0][0] = (DrawType_t)APP()->GetProfileInt("Splitter", "DrawType0,0", VIEW3D_WIREFRAME); eDrawType[0][1] = (DrawType_t)APP()->GetProfileInt("Splitter", "DrawType0,1", VIEW2D_XY); eDrawType[1][0] = (DrawType_t)APP()->GetProfileInt("Splitter", "DrawType1,0", VIEW2D_YZ); eDrawType[1][1] = (DrawType_t)APP()->GetProfileInt("Splitter", "DrawType1,1", VIEW2D_XZ);
for (int nRow = 0; nRow < 2; nRow++) { for (int nCol = 0; nCol < 2; nCol++) { // These might be lying around in people's registry.
if ((eDrawType[nRow][nCol] == VIEW3D_ENGINE) || (eDrawType[nRow][nCol] >= VIEW_TYPE_LAST)) { eDrawType[nRow][nCol] = VIEW3D_TEXTURED; } switch (eDrawType[nRow][nCol]) { case VIEW2D_XY: case VIEW2D_XZ: case VIEW2D_YZ: { m_wndSplitter->CreateView(nRow, nCol, RUNTIME_CLASS(CMapView2D), sizeView, pContext); break; }
case VIEW_LOGICAL: { m_wndSplitter->CreateView(nRow, nCol, RUNTIME_CLASS(CMapViewLogical), sizeView, pContext); break; }
case VIEW3D_WIREFRAME: case VIEW3D_POLYGON: case VIEW3D_TEXTURED: case VIEW3D_TEXTURED_SHADED: case VIEW3D_LIGHTMAP_GRID: case VIEW3D_LIGHTING_PREVIEW2: case VIEW3D_LIGHTING_PREVIEW_RAYTRACED: case VIEW3D_SMOOTHING_GROUP: { m_wndSplitter->CreateView(nRow, nCol, RUNTIME_CLASS(CMapView3D), sizeView, pContext); break; } }
CMapView *pView = dynamic_cast<CMapView*>(m_wndSplitter->GetPane(nRow, nCol)); if (pView != NULL) { pView->SetDrawType(eDrawType[nRow][nCol]); } } } int nWidth = APP()->GetProfileInt("Splitter", "SplitterWidth", -1); int nHeight = APP()->GetProfileInt("Splitter", "SplitterHeight", -1);
if ( nWidth != -1 && nHeight != -1 ) { m_wndSplitter->SetRowInfo( 0, nHeight, 0 ); m_wndSplitter->SetColumnInfo( 0, nWidth, 0 ); m_wndSplitter->RecalcLayout(); } else { m_bNeedsCentered = TRUE; }
m_bReady = TRUE; return TRUE; }
//
// No splitter, call default creation code.
//
return(CMDIChildWnd::OnCreateClient(lpcs, pContext)); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CChildFrame::CenterViews(void) { if (!bUsingSplitter || !m_bReady) { return; }
WriteDebug("childfrm::centerviews");
CRect r; GetClientRect(r); CSize sizeView(r.Width()/2 - 3, r.Height()/2 - 3);
sizeView.cy = max(0, sizeView.cy); sizeView.cx = max(0, sizeView.cx);
m_wndSplitter->SetRowInfo(0, sizeView.cy, 0); m_wndSplitter->SetRowInfo(1, sizeView.cy, 0); m_wndSplitter->SetColumnInfo(0, sizeView.cx, 0); m_wndSplitter->SetColumnInfo(1, sizeView.cx, 0); m_wndSplitter->RecalcLayout(); WriteDebug("childfrm::centerviews done"); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CChildFrame::OnViewAutosize4(void) { if (!bUsingSplitter) { return; }
if (0) // bAutosize4)
{ bAutosize4 = FALSE; } else { // resize 4 views
CenterViews(); } }
//-----------------------------------------------------------------------------
// Purpose:
// Input : pCmdUI -
//-----------------------------------------------------------------------------
void CChildFrame::OnUpdateViewAutosize4(CCmdUI *pCmdUI) { }
//-----------------------------------------------------------------------------
// Purpose:
// Input : nType -
// cx -
// cy -
//-----------------------------------------------------------------------------
void CChildFrame::OnSize(UINT nType, int cx, int cy) { CMDIChildWnd::OnSize(nType, cx, cy); }
//-----------------------------------------------------------------------------
// Purpose:
// Input : lpCreateStruct -
// Output : int
//-----------------------------------------------------------------------------
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) { return(-1); }
//
// The splitter gets its layout from the registry.
//
if ( bUsingSplitter && CHammer::IsNewDocumentVisible() ) { CString str = APP()->GetProfileString("Splitter", "WindowPlacement", ""); if (!str.IsEmpty()) { WINDOWPLACEMENT wp; wp.length = sizeof(wp); wp.flags = 0; sscanf(str, "(%d %d) (%d %d) (%d %d %d %d) %d", &wp.ptMaxPosition.x, &wp.ptMaxPosition.y, &wp.ptMinPosition.x, &wp.ptMinPosition.y, &wp.rcNormalPosition.bottom, &wp.rcNormalPosition.left, &wp.rcNormalPosition.right, &wp.rcNormalPosition.top, &wp.showCmd);
if (wp.showCmd == SW_SHOWMAXIMIZED) { PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE); } else { SetWindowPlacement(&wp); } } }
return(0); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CChildFrame::OnPaint(void) { if (bFirstPaint) { ValidateRect(NULL); bFirstPaint = FALSE; if ( m_bNeedsCentered ) { CenterViews(); } Invalidate(); return; }
CPaintDC dc(this); // device context for painting
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : *pWnd -
//-----------------------------------------------------------------------------
void CMySplitterWnd::ToggleMax(CWnd *pWnd) { int ir, ic;
if(!pMaxPrev) { int dummy; // save current info
GetRowInfo(0, sizePrev[1][0], dummy); GetRowInfo(1, sizePrev[1][1], dummy); GetColumnInfo(0, sizePrev[0][0], dummy); GetColumnInfo(1, sizePrev[0][1], dummy); }
if(pWnd != pMaxPrev) { // maximize this one
int iRow, iCol; CRect r; GetClientRect(r); VERIFY(IsChildPane(pWnd, &iRow, &iCol));
for(ir = 0; ir < 2; ir++) { for(ic = 0; ic < 2; ic++) { SetRowInfo(ir, 0, 0); SetColumnInfo(ic, 0, 0); } }
SetRowInfo(iRow, r.Height(), 5); SetColumnInfo(iCol, r.Width(), 5);
pMaxPrev = pWnd; } else { // restore saved info
SetRowInfo(0, sizePrev[1][0], 0); SetRowInfo(1, sizePrev[1][1], 0); SetColumnInfo(0, sizePrev[0][0], 0); SetColumnInfo(1, sizePrev[0][1], 0);
pMaxPrev = NULL; }
RecalcLayout(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CChildFrame::OnViewMaximizepane(void) { if (!bUsingSplitter) { return; }
// find current wndsplitter pane, & call ToggleMax() in
// cmysplitterwnd.
if (m_wndSplitter->GetActivePane()) { m_wndSplitter->ToggleMax(m_wndSplitter->GetActivePane()); } }
//-----------------------------------------------------------------------------
// Purpose:
// Input : *pCmdUI -
//-----------------------------------------------------------------------------
void CChildFrame::OnUpdateViewMaximizepane(CCmdUI *pCmdUI) { pCmdUI->Enable(); }
//-----------------------------------------------------------------------------
// Purpose:
// Input :
//-----------------------------------------------------------------------------
void CChildFrame::OnWindowToggle(void) { // SetSplitterMode(!bUsingSplitter);
}
//-----------------------------------------------------------------------------
// Purpose: Saves the splitter setup for next time.
//-----------------------------------------------------------------------------
void CChildFrame::OnClose(void) { SaveOptions(); CFrameWnd::OnClose(); } void CChildFrame::OnSetFocus( CWnd* pOldWnd ) { CMDIChildWnd::OnSetFocus( pOldWnd );
CMapDoc *pDoc = dynamic_cast<CMapDoc*>(GetActiveDocument());
if ( pDoc ) CMapDoc::SetActiveMapDoc( pDoc ); }
|