home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
mfc
/
general
/
snapvw
/
snapview.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
6KB
|
224 lines
// SnapView.cpp : implementation of the CSnapView class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "SnapVw.h"
#include "SnapDoc.h"
#include "SnapView.h"
#include "BkfstPg.h"
#include "LunchPg.h"
#include "DinnerPg.h"
#include "SnapPs.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSnapView
IMPLEMENT_DYNCREATE(CSnapView, CFormView)
BEGIN_MESSAGE_MAP(CSnapView, CFormView)
//{{AFX_MSG_MAP(CSnapView)
ON_WM_SIZE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSnapView construction/destruction
CSnapView::CSnapView() : CFormView((LPCTSTR)NULL)
{
//{{AFX_DATA_INIT(CSnapView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
m_bSizedBefore = FALSE;
m_pPropSheet = NULL;
m_pPageBkfst = NULL;
m_pPageLunch = NULL;
m_pPageDinner = NULL;
m_hWndFocus = NULL;
}
CSnapView::~CSnapView()
{
// explicitly delete sheet and pages
delete m_pPropSheet;
delete m_pPageBkfst;
delete m_pPageLunch;
delete m_pPageDinner;
}
void CSnapView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSnapView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CSnapView printing
/////////////////////////////////////////////////////////////////////////////
// CSnapView diagnostics
#ifdef _DEBUG
void CSnapView::AssertValid() const
{
CFormView::AssertValid();
}
void CSnapView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CSnapDoc* CSnapView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSnapDoc)));
return (CSnapDoc*) m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSnapView message handlers
void CSnapView::OnSize(UINT nType, int cx, int cy)
{
if (nType != SIZE_MINIMIZED && cx != 0 && cy != 0 && m_pPropSheet != NULL)
{
if (m_bSizedBefore == FALSE)
{
m_bSizedBefore = TRUE;
// get the size of the property sheet
CRect rectSized;
m_pPropSheet->GetWindowRect(rectSized);
// calculate the size of the frame
CFrameWnd* pFrame = GetParentFrame();
if (pFrame != NULL)
{
pFrame->CalcWindowRect(rectSized);
CWnd* pParent = pFrame->GetParent();
if (pParent != NULL)
pParent->ScreenToClient(rectSized);
// resize and reposition the frame
pFrame->MoveWindow(rectSized);
}
}
}
}
BOOL CSnapView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
ASSERT(pParentWnd != NULL);
ASSERT_KINDOF(CFrameWnd, pParentWnd);
if (!CWnd::Create(lpszClassName, lpszWindowName, dwStyle | WS_CLIPCHILDREN,
rect, pParentWnd, nID, pContext))
{
return FALSE;
}
// add your pages here!
m_pPageBkfst = new CBkfstPage;
m_pPageLunch = new CLunchPage;
m_pPageDinner = new CDinnerPage;
// create the window object
m_pPropSheet = new CSnapPropertySheet;
m_pPropSheet->AddPage(m_pPageBkfst);
m_pPropSheet->AddPage(m_pPageLunch);
m_pPropSheet->AddPage(m_pPageDinner);
// create a modeless property page
if (!m_pPropSheet->Create(this,
DS_CONTEXTHELP | DS_SETFONT | WS_CHILD | WS_VISIBLE))
{
DestroyWindow();
return FALSE;
}
m_pPropSheet->SetWindowPos(NULL, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
// we use the style from the template - but make sure that
// the WS_BORDER bit is correct.
// the WS_BORDER bit will be whatever is in dwRequestedStyle
m_pPropSheet->ModifyStyle(WS_BORDER|WS_CAPTION,
dwStyle & (WS_BORDER|WS_CAPTION));
// Force the size requested.
// Fake a call to OnSize()--it would have been called automatically
// if this were using the base class implementation of Create().
CFrameWnd* pParentFrame = GetParentFrame();
CRect rectSize;
m_pPropSheet->GetWindowRect(rectSize);
pParentFrame->CalcWindowRect(rectSize);
OnSize(SIZE_RESTORED, rectSize.Width(), rectSize.Height());
return TRUE;
}
BOOL CSnapView::OnEraseBkgnd(CDC* pDC)
{
CBrush* pOldBrush;
CBrush backBrush;
backBrush.CreateSolidBrush(::GetSysColor(COLOR_3DLIGHT));
backBrush.UnrealizeObject();
CRect rectClient;
GetClientRect(rectClient);
pOldBrush = pDC->SelectObject(&backBrush);
pDC->Rectangle(rectClient);
pDC->SelectObject(pOldBrush);
return TRUE;
}
void CSnapView::OnDraw(CDC* pDC)
{
// we don't draw because the child window will do it all
}
void CSnapView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
SetScaleToFitSize(CSize(1, 1));
}