123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /* Copyright (c) 2002-2012 Croteam Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as published by
- the Free Software Foundation
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
- // InfoFrame.cpp : implementation file
- //
- #include "stdafx.h"
- #include "InfoFrame.h"
- #ifdef _DEBUG
- #undef new
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CInfoFrame
- IMPLEMENT_DYNCREATE(CInfoFrame, CMiniFrameWnd)
- CInfoFrame::CInfoFrame()
- {
- m_pInfoSheet = NULL;
- }
- CInfoFrame::~CInfoFrame()
- {
- // there is no need to destroy or delete sheet object m_pInfoSheet because
- // it is created as child window and will be automatically deleted trough its
- // PostNcDestroy() and DestroyWindow() member functions. (second one will be called
- // by its parent and will end with "delete this;"
- }
- BEGIN_MESSAGE_MAP(CInfoFrame, CMiniFrameWnd)
- //{{AFX_MSG_MAP(CInfoFrame)
- ON_WM_CREATE()
- ON_WM_CLOSE()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CInfoFrame message handlers
- int CInfoFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CMiniFrameWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
-
- CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
- // create sheet object to hold numerous pages
- m_pInfoSheet = new CInfoSheet(this);
- // if creation fails, delete allocated object
- if (!m_pInfoSheet->Create(this, WS_CHILD | WS_VISIBLE, 0))
- {
- delete m_pInfoSheet;
- m_pInfoSheet = NULL;
- return -1;
- }
- // resize the mini frame so that it fits around the child property sheet
- CRect rectClient, rectWindow;
- // property sheet's window rectangle
- m_pInfoSheet->GetWindowRect(rectClient);
- // becomes mini frame's client rectangle
- rectWindow = rectClient;
- // add the width and height needed from the mini frame's borders
- CalcWindowRect(rectWindow);
- // get screen size
- int iScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
- int iScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
- // rectangle to hold status bar size
- CRect rectStatusBar;
- // get status bar rectangle
- pMainFrame->m_wndStatusBar.GetWindowRect( rectStatusBar);
- // rectangle to hold mainframe height
- CRect rectMainFrame;
- // get main frame rectangle
- pMainFrame->GetWindowRect( rectMainFrame);
- PIX pixStatusHeight = rectStatusBar.Height();
- PIX pixInfoHeight = rectWindow.Height();
- PIX pixMainFrameHeight = rectMainFrame.Height();
- // offset mini frame window coordinates so it fits in lower left part of the screen
- //rectWindow.OffsetRect( 3, iScreenHeight - pixInfoHeight - pixStatusHeight - 3);
- rectWindow.OffsetRect( 0, pixMainFrameHeight - pixInfoHeight - pixStatusHeight - 9);
-
- // move frame window to new position
- SetWindowPos( NULL, rectWindow.left, rectWindow.top, rectWindow.Width(), rectWindow.Height(),
- SWP_NOZORDER | SWP_NOACTIVATE);
- // set property sheet position and type
- m_pInfoSheet->SetWindowPos( NULL, 0, 0, rectClient.Width(), rectClient.Height(),
- SWP_NOZORDER | SWP_NOACTIVATE);
- return 0;
- }
- void CInfoFrame::OnClose()
- {
- // Instead of closing the modeless property sheet, just hide it.
- CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
- pMainFrame->m_pInfoFrame->ShowWindow(SW_HIDE);
- }
|