home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
appwiz
/
customwz
/
sampleaw.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-05
|
5KB
|
155 lines
// sampleaw.cpp: implementation of CSampleAppWiz class.
//
// Copyright (c) 1985-1998, Microsoft Corporation. All rights reserved.
//
#include "stdafx.h"
#include "customwz.h"
#include "sampleaw.h"
#include "chooser.h"
#include "zap.h"
#include "options.h"
#ifdef _PSEUDO_DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The CSampleAppWiz class. Here we override many member functions of
// CCustomAppWiz.
// Initialize state of this custom AppWizard.
void CSampleAppWiz::InitCustomAppWiz()
{
m_pChooser = new CDialogChooser;
m_bOverrideProcessing = FALSE;
SetNumberOfSteps(2); // Initially two steps
// Set the macro corresponding to the Custom AppWizard target type.
// This is used in mfcapwz.dll when it creates the target.
DefineBoolMacro(_T("PROJTYPE_CUSTOMAW"), TRUE);
}
// Before exiting, deallocate memory used for the dialog chooser
void CSampleAppWiz::ExitCustomAppWiz()
{
ASSERT(m_pChooser != NULL);
delete m_pChooser;
m_pChooser = NULL;
}
// This custom AppWizard only targets Win32 platform, so don't display
// any others.
void CSampleAppWiz::GetPlatforms(CStringList& Platforms)
{
POSITION pos = Platforms.GetHeadPosition();
while (pos != NULL)
{
POSITION posCurr = pos;
CString strPlatform = Platforms.GetNext(pos);
if (strPlatform.Left(5) != _T("Win32"))
Platforms.RemoveAt(posCurr);
}
}
// Set options & macros derived from project name entered by end-user.
void SetRootOptions()
{
// Set "FILEBASE" macro
CString strFileBase;
sampleaw.m_Dictionary.Lookup(_T("Root"), strFileBase);
DefineStringMacro(_T("filebase"), strFileBase);
}
// If the end-user clicks next, let the dialog chooser decide
// what to pop up next.
CAppWizStepDlg* CSampleAppWiz::Next(CAppWizStepDlg* pDlg)
{
// If the end-user is dismissing the New Project dialog,
// call DefineRootMacros
if (pDlg == NULL)
SetRootOptions();
return m_pChooser->Next(pDlg);
}
// If the end-user clicks back, let the dialog chooser decide
// what to pop up.
CAppWizStepDlg* CSampleAppWiz::Back(CAppWizStepDlg* pDlg)
{
return m_pChooser->Back(pDlg);
}
// We override LoadTemplate as part of implementing the project
// zapper.
LPCTSTR CSampleAppWiz::LoadTemplate(LPCTSTR lpszTemplateName,
DWORD& rdwSize, HINSTANCE hInstance)
{
// If the resource we're loading contains a backslash in it...
if (_tcschr(lpszTemplateName, _T('\\')))
{
// ... then it's a file we're about to zap (see CZap).
m_bOverrideProcessing = TRUE; // Remember we're overriding parsing
return m_Zap.LoadFile(lpszTemplateName, rdwSize);// Prepare the zapper for this file
}
// Otherwise, defer to the base class implementation of LoadTemplate
m_bOverrideProcessing = FALSE;
// But first, be sure to define GENERATED_NEWPROJ_INF_FILES if it's time
if (!_tcsicmp(lpszTemplateName, _T("newnwprj.inf")))
m_Zap.DefineGeneratedNewprojInfMacro();
return CCustomAppWiz::LoadTemplate(lpszTemplateName, rdwSize, hInstance);
}
// We override ProcessTemplate as part of implementing the project
// zapper.
void CSampleAppWiz::ProcessTemplate(LPCTSTR lpszInput, DWORD dwSize, OutputStream* pOutput)
{
// If we set m_bOverrideProcessing in LoadTemplate, then we're about
// zap this file.
if (m_bOverrideProcessing)
{
// Zap the file into a template
m_Zap.ZapFile(lpszInput, dwSize, pOutput);
return;
}
// We're not zapping this file, so defer to the base class
// implementation of ProcessTemplate
CCustomAppWiz::ProcessTemplate(lpszInput, dwSize, pOutput);
}
// We override PostProcessTemplate as part of implementing the project
// zapper.
void CSampleAppWiz::PostProcessTemplate(LPCTSTR szTemplate)
{
// If we set m_bOverrideProcessing in LoadTemplate, then we've just
// zapped this file. Unload it.
if (m_bOverrideProcessing)
{
m_Zap.UnloadFile();
m_bOverrideProcessing = FALSE;
}
}
// The dialog chooser keeps track of which type of custom AppWizard we're
// creating (based on project, based on appwiz sequence, or base) so it
// knows what dialog to pop up next. Any request to set or get the
// custom AppWizard type goes through the chooser.
void CSampleAppWiz::SetCustomType(int nCustomType)
{
m_pChooser->SetCustomType(nCustomType);
}
int CSampleAppWiz::GetCustomType()
{
return m_pChooser->GetCustomType();
}
// Create one global instance of this class anyone can see.
CSampleAppWiz sampleaw;