123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // ResizableMDIChild.cpp : implementation file
- //
- /////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) 2000-2002 by Paolo Messina
- // (http://www.geocities.com/ppescher - ppescher@yahoo.com)
- //
- // The contents of this file are subject to the Artistic License (the "License").
- // You may not use this file except in compliance with the License.
- // You may obtain a copy of the License at:
- // http://www.opensource.org/licenses/artistic-license.html
- //
- // If you find this code useful, credits would be nice!
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "ResizableMDIChild.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CResizableMDIChild
- IMPLEMENT_DYNCREATE(CResizableMDIChild, CMDIChildWnd)
- CResizableMDIChild::CResizableMDIChild()
- {
- m_bEnableSaveRestore = FALSE;
- }
- CResizableMDIChild::~CResizableMDIChild()
- {
- }
- BEGIN_MESSAGE_MAP(CResizableMDIChild, CMDIChildWnd)
- //{{AFX_MSG_MAP(CResizableMDIChild)
- ON_WM_GETMINMAXINFO()
- ON_WM_SIZE()
- ON_WM_DESTROY()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CResizableMDIChild message handlers
- void CResizableMDIChild::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
- {
- MinMaxInfo(lpMMI);
- CView* pView = GetActiveView();
- if (pView == NULL)
- return;
- // get the extra size from view to frame
- CRect rectClient, rectWnd;
- if (IsZoomed())
- GetClientRect(rectWnd);
- else
- GetWindowRect(rectWnd);
- RepositionBars(0, 0xFFFF, AFX_IDW_PANE_FIRST, reposQuery, rectClient);
- CSize sizeExtra = rectWnd.Size() - rectClient.Size();
- // ask the view for track size
- MINMAXINFO mmiView = *lpMMI;
- pView->SendMessage(WM_GETMINMAXINFO, 0, (LPARAM)&mmiView);
- mmiView.ptMaxTrackSize = sizeExtra + mmiView.ptMaxTrackSize;
- mmiView.ptMinTrackSize = sizeExtra + mmiView.ptMinTrackSize;
- // min size is the largest
- lpMMI->ptMinTrackSize.x = __max(lpMMI->ptMinTrackSize.x,
- mmiView.ptMinTrackSize.x);
- lpMMI->ptMinTrackSize.y = __max(lpMMI->ptMinTrackSize.y,
- mmiView.ptMinTrackSize.y);
- // max size is the shortest
- lpMMI->ptMaxTrackSize.x = __min(lpMMI->ptMaxTrackSize.x,
- mmiView.ptMaxTrackSize.x);
- lpMMI->ptMaxTrackSize.y = __min(lpMMI->ptMaxTrackSize.y,
- mmiView.ptMaxTrackSize.y);
- // MDI should call default implementation
- CMDIChildWnd::OnGetMinMaxInfo(lpMMI);
- }
- void CResizableMDIChild::OnSize(UINT nType, int cx, int cy)
- {
- CMDIChildWnd::OnSize(nType, cx, cy);
- // make sure the MDI parent frame doesn't clip
- // this child window when it is maximized
- if (nType == SIZE_MAXIMIZED)
- {
- CMDIFrameWnd* pFrame = GetMDIFrame();
- CRect rect;
- pFrame->GetWindowRect(rect);
- pFrame->MoveWindow(rect);
- }
- }
- // NOTE: this must be called after setting the layout
- // to have the view and its controls displayed properly
- BOOL CResizableMDIChild::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
- {
- m_sSection = pszSection;
- m_bEnableSaveRestore = TRUE;
- m_bRectOnly = bRectOnly;
- // restore immediately
- return LoadWindowRect(pszSection, bRectOnly);
- }
- void CResizableMDIChild::OnDestroy()
- {
- if (m_bEnableSaveRestore)
- SaveWindowRect(m_sSection, m_bRectOnly);
- CMDIChildWnd::OnDestroy();
- }
|