123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // ResizableState.cpp: implementation of the CResizableState class.
- //
- /////////////////////////////////////////////////////////////////////////////
- //
- // 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 "ResizableState.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CResizableState::CResizableState()
- {
- }
- CResizableState::~CResizableState()
- {
- }
- // used to save/restore window's size and position
- // either in the registry or a private .INI file
- // depending on your application settings
- #define PLACEMENT_ENT _T("WindowPlacement")
- #define PLACEMENT_FMT _T("%d,%d,%d,%d,%d,%d")
- BOOL CResizableState::SaveWindowRect(LPCTSTR pszSection, BOOL bRectOnly)
- {
- CString data;
- WINDOWPLACEMENT wp;
- ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
- wp.length = sizeof(WINDOWPLACEMENT);
- if (!GetResizableWnd()->GetWindowPlacement(&wp))
- return FALSE;
-
- RECT& rc = wp.rcNormalPosition; // alias
- if (bRectOnly) // save size/pos only (normal state)
- {
- // use screen coordinates
- GetResizableWnd()->GetWindowRect(&rc);
- data.Format(PLACEMENT_FMT, rc.left, rc.top,
- rc.right, rc.bottom, SW_NORMAL, 0);
- }
- else // save also min/max state
- {
- // use workspace coordinates
- data.Format(PLACEMENT_FMT, rc.left, rc.top,
- rc.right, rc.bottom, wp.showCmd, wp.flags);
- }
- return AfxGetApp()->WriteProfileString(pszSection, PLACEMENT_ENT, data);
- }
- BOOL CResizableState::LoadWindowRect(LPCTSTR pszSection, BOOL bRectOnly)
- {
- CString data;
- WINDOWPLACEMENT wp;
- data = AfxGetApp()->GetProfileString(pszSection, PLACEMENT_ENT);
-
- if (data.IsEmpty()) // never saved before
- return FALSE;
-
- ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
- wp.length = sizeof(WINDOWPLACEMENT);
- if (!GetResizableWnd()->GetWindowPlacement(&wp))
- return FALSE;
- RECT& rc = wp.rcNormalPosition; // alias
- if (_stscanf(data, PLACEMENT_FMT, &rc.left, &rc.top,
- &rc.right, &rc.bottom, &wp.showCmd, &wp.flags) == 6)
- {
- if (bRectOnly) // restore size/pos only
- {
- CRect rect(rc);
- return GetResizableWnd()->SetWindowPos(NULL, rect.left, rect.top,
- rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER |
- SWP_NOREPOSITION);
- }
- else // restore also min/max state
- {
- return GetResizableWnd()->SetWindowPlacement(&wp);
- }
- }
- return FALSE;
- }
|