home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
appwiz
/
logowiz
/
chooser.cpp
next >
Wrap
C/C++ Source or Header
|
1998-03-05
|
5KB
|
135 lines
// chooser.cpp : Implements the CDialogChooser class
//
// This class is where you set up the sequence of steps that will
// be followed in your custom AppWizard. These steps can include
// both standard AppWizard steps and your own custom steps.
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1995 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 "logowiz.h"
#include "chooser.h"
#include "cstm1dlg.h"
#include "logowaw.h"
#ifdef _PSEUDO_DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define DOC_TRACK 0 // MDI/SDI based app track
#define DLG_TRACK 1 // dialog based app track
// define the steps, since these are array indices, their values matter
#define STEP_ZERO 0
#define STEP_APPTYPE 1
//#define STEP_DATABASE 2 // closed gap 'cause we dropped this one
#define STEP_OLE 2
#define STEP_DOCOPTIONS 3
#define STEP_PROJOPTIONS 4
#define STEP_CLASSES 5
#define STEP_DLGOPTIONS 6
#define STEP_CUSTOM 7
// On construction, set up internal array with pointers to each step.
CDialogChooser::CDialogChooser()
{
m_pDlgs[STEP_ZERO] = NULL;
m_pDlgs[STEP_APPTYPE] = GetDialog(APWZDLG_APPTYPE);
// m_pDlgs[STEP_DATABASE] = GetDialog(APWZDLG_DATABASE);
m_pDlgs[STEP_OLE] = GetDialog(APWZDLG_OLE);
m_pDlgs[STEP_DOCOPTIONS] = GetDialog(APWZDLG_DOCAPPOPTIONS);
m_pDlgs[STEP_PROJOPTIONS] = GetDialog(APWZDLG_PROJOPTIONS);
m_pDlgs[STEP_CLASSES] = GetDialog(APWZDLG_CLASSES);
m_pDlgs[STEP_DLGOPTIONS] = GetDialog(APWZDLG_DLGAPPOPTIONS);
m_pDlgs[STEP_CUSTOM] = new CCustom1Dlg;
m_nCurrDlg = STEP_ZERO;
m_nTrack = DOC_TRACK;
}
// Remember where the custom steps begin, so we can delete them in
// the destructor
#define FIRST_CUSTOM_STEP 7
#define LAST_CUSTOM_STEP 7
// Set up arrays of indices to simulate behavior of AppWizard (i.e., to have
// separate "tracks" for an MDI/SDI app and a dialog-based app).
// There are two things being illustrated here:
// 1. there is a custom step added for the dialog-based app
// 2. the ODBC step is left out for the MDI/SDI app
//static int nDocTrack[] = {STEP_ZERO, STEP_APPTYPE, STEP_DATABASE,
// STEP_OLE, STEP_DOCOPTIONS, STEP_PROJOPTIONS, STEP_CLASSES, STEP_CUSTOM};
static int nDocTrack[] = {STEP_ZERO, STEP_APPTYPE, STEP_OLE,
STEP_DOCOPTIONS, STEP_PROJOPTIONS, STEP_CLASSES};
//static int nDlgTrack[] = {STEP_ZERO, STEP_APPTYPE, STEP_DLGOPTIONS, STEP_PROJOPTIONS, STEP_CLASSES, STEP_CUSTOM};
static int nDlgTrack[] = {STEP_ZERO, STEP_APPTYPE, STEP_DLGOPTIONS, STEP_PROJOPTIONS, STEP_CUSTOM, STEP_CLASSES};
static int* pnTrack[] = {nDocTrack, nDlgTrack};
//static int nLast[] = {STEP_CUSTOM, STEP_CLASSES};
static int nLast[] = {STEP_CLASSES, STEP_CLASSES};
// The destructor deletes entries in the internal array corresponding to
// custom steps.
CDialogChooser::~CDialogChooser()
{
// NOTE: Be sure to delete all of your custom steps here, but don't delete
// any standard AppWizard steps you got through the GetDialog API.
for (int i = FIRST_CUSTOM_STEP; i <= LAST_CUSTOM_STEP; i++)
{
ASSERT(m_pDlgs[i] != NULL);
delete m_pDlgs[i];
}
}
// Use the internal array to determine the next step.
CAppWizStepDlg* CDialogChooser::Next(CAppWizStepDlg* pDlg)
{
ASSERT(m_nTrack == DOC_TRACK || m_nTrack == DLG_TRACK);
ASSERT(0 <= m_nCurrDlg && m_nCurrDlg < nLast[m_nTrack]);
ASSERT(pDlg == m_pDlgs[(pnTrack[m_nTrack])[m_nCurrDlg]]);
// If the current step is the "project type" step, the AppWizard "track" may
// have changed.
if (m_nCurrDlg == STEP_APPTYPE)
{
CString strTemp;
m_nTrack = logowizaw.m_Dictionary.Lookup(_T("PROJTYPE_DLG"), strTemp) ? 1 : 0;
SetNumberOfSteps(nLast[m_nTrack]);
}
m_nCurrDlg++;
// If the new step is the "project type" step, don't display the max number
// of steps.
if (m_nCurrDlg == STEP_APPTYPE)
SetNumberOfSteps(-1);
return m_pDlgs[(pnTrack[m_nTrack])[m_nCurrDlg]];
}
// Use the internal array to determine the previous step.
CAppWizStepDlg* CDialogChooser::Back(CAppWizStepDlg* pDlg)
{
ASSERT(m_nTrack == DOC_TRACK || m_nTrack == DLG_TRACK);
ASSERT(1 <= m_nCurrDlg && m_nCurrDlg <= nLast[m_nTrack]);
ASSERT(pDlg == m_pDlgs[(pnTrack[m_nTrack])[m_nCurrDlg]]);
m_nCurrDlg--;
// If the new step is the "project type" step, don't display the max number
// of steps.
if (m_nCurrDlg == STEP_APPTYPE)
SetNumberOfSteps(-1);
return m_pDlgs[(pnTrack[m_nTrack])[m_nCurrDlg]];
}