This repository was archived by the owner on Mar 20, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInfoFrame.cpp
More file actions
119 lines (96 loc) · 3.81 KB
/
InfoFrame.cpp
File metadata and controls
119 lines (96 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* 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 "StdH.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);
}