123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- // ResizableDialog.cpp : implementation file
- //
- /////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) 2000-2001 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 "ResizableDialog.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CResizableDialog
- inline void CResizableDialog::Construct()
- {
- m_bInitDone = FALSE;
- m_bEnableSaveRestore = FALSE;
- }
- CResizableDialog::CResizableDialog()
- {
- Construct();
- }
- CResizableDialog::CResizableDialog(UINT nIDTemplate, CWnd* pParentWnd)
- : CDialog(nIDTemplate, pParentWnd)
- {
- Construct();
- }
- CResizableDialog::CResizableDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
- : CDialog(lpszTemplateName, pParentWnd)
- {
- Construct();
- }
- CResizableDialog::~CResizableDialog()
- {
- }
- BEGIN_MESSAGE_MAP(CResizableDialog, CDialog)
- //{{AFX_MSG_MAP(CResizableDialog)
- ON_WM_GETMINMAXINFO()
- ON_WM_SIZE()
- ON_WM_DESTROY()
- ON_WM_CREATE()
- ON_WM_ERASEBKGND()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CResizableDialog message handlers
- int CResizableDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CDialog::OnCreate(lpCreateStruct) == -1)
- return -1;
- // keep client area
- CRect rect;
- GetClientRect(&rect);
- // set resizable style
- ModifyStyle(DS_MODALFRAME, WS_POPUP | WS_THICKFRAME);
- // adjust size to reflect new style
- ::AdjustWindowRectEx(&rect, GetStyle(),
- ::IsMenu(GetMenu()->GetSafeHmenu()), GetExStyle());
- SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(), SWP_FRAMECHANGED|
- SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOREPOSITION);
- if (!InitGrip())
- return -1;
- return 0;
- }
- BOOL CResizableDialog::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // gets the template size as the min track size
- CRect rc;
- GetWindowRect(&rc);
- SetMinTrackSize(rc.Size());
- // init
- UpdateGripPos();
- m_bInitDone = TRUE;
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CResizableDialog::OnDestroy()
- {
- if (m_bEnableSaveRestore)
- SaveWindowRect(m_sSection, m_bRectOnly);
- // remove child windows
- RemoveAllAnchors();
- CDialog::OnDestroy();
- }
- void CResizableDialog::OnSize(UINT nType, int cx, int cy)
- {
- CWnd::OnSize(nType, cx, cy);
-
- if (nType == SIZE_MAXHIDE || nType == SIZE_MAXSHOW)
- return; // arrangement not needed
- if (m_bInitDone)
- {
- // update size-grip
- UpdateGripPos();
- ArrangeLayout();
- }
- }
- void CResizableDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
- {
- if (!m_bInitDone)
- return;
- MinMaxInfo(lpMMI);
- }
- // NOTE: this must be called after setting the layout
- // to have the dialog and its controls displayed properly
- void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
- {
- m_sSection = pszSection;
- m_bEnableSaveRestore = TRUE;
- m_bRectOnly = bRectOnly;
- // restore immediately
- LoadWindowRect(pszSection, bRectOnly);
- }
- BOOL CResizableDialog::OnEraseBkgnd(CDC* pDC)
- {
- ClipChildren(pDC);
- return CDialog::OnEraseBkgnd(pDC);
- }
|