📄 wizard.cpp
字号:
/*==========================================================================
*
* Copyright (C) 1995-1996 Microsoft Corporation. All Rights Reserved.
*
* File: wizard.c
* Content: User input (setup wizard) related code
*
*
***************************************************************************/
#include <windows.h>
#include<stdio.h>
#include "prsht.h"
#include "wizard.h"
#include "util.h"
#include "comm.h"
#include"ddraw.h"
#include"dplay.h"
#include"dplobby.h"
#include"ddutil.h"
#include"d3dtypes.h"
#include"draw.h"
#include"dinput.h"
#include"basic.h"
extern "C"{
#include"input.h"
}
//#include "global.h"
#define MAINMENU 0
#define CHOOSESP 1
#define HOSTORJOIN 2
#define HOST 3
#define JOIN 4
#define COMSET 5
#define LBUTTONDOWN 128
//mainmenu state
#define START 8
#define OPTIONS 32
#define CREDIT 16
#define EXIT 64
LONG CALLBACK WizardProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
void WizardBlt(int type);
BOOL ProcessInput(void);
/*
* Externals
*/
extern HWND ghWndMain;
extern LPDIRECTDRAW lpDD;
extern LPDIRECTDRAWSURFACE lpDDSPrimary;
extern LPDIRECTDRAWSURFACE lpDDSBack;
/*
* Globals to this module
*/
extern DWORD gdwKeys;
extern WORD ProgramState;
int menustate=0;
DWORD gdwButton;
DWORD KeyTime;
char cTaskName[24];
DWORD Time;
static HFONT ghTitleFont; // font for titles on setup wizard
static HFONT ghHeadingFont; // font for headings on setup wizard
static int gnSP,gnSession,gnPlayer; // indexes for tree view images
static HKEY ghDuelKey=NULL; // duel registry key handle
static DWORD gdwDuelDisp; // key created or opened
static GUID gSPGuid; // currently selected service provider guid
static HTREEITEM ghtiSession; // points to a visible session item in tree control
BOOL bConnected; // used for inserting players into tree control
static HWND ghWndSPCtl; // handle to service provider control
static HWND hWndWizard;
BOOL bIsHost;
//GUID Guid_Int=(GUID)DPAID_INet;
//GUID Guid_Ipx=(GUID)DPAID_ServiceProvider;
//GUID Guid_Mod=(GUID)DPAID_Phone;
//GUID Guid_Com=(GUID)DPAID_ComPort;
int WizardProgress;
LPDIRECTDRAWSURFACE lpWizardBack;
LPDIRECTDRAWSURFACE lpSPBarOff[4];
LPDIRECTDRAWSURFACE lpSPBarOn[4];
LPDIRECTDRAWSURFACE lpRadioUp;
LPDIRECTDRAWSURFACE lpRadioDn;
LPDIRECTDRAWSURFACE lpPageUp;
LPDIRECTDRAWSURFACE lpPageDn;
LPDIRECTDRAWSURFACE lpPageUp2;
LPDIRECTDRAWSURFACE lpPageDn2;
LPDIRECTDRAWSURFACE lpHostBar;
LPDIRECTDRAWSURFACE lpHostBar2;
LPDIRECTDRAWSURFACE lpJoinBar;
LPDIRECTDRAWSURFACE lpJoinBar2;
LPDIRECTDRAWSURFACE lpPanel;
LPDIRECTDRAWSURFACE lpInput1;
LPDIRECTDRAWSURFACE lpInput2;
LPDIRECTDRAWSURFACE lpInput3;
LPDIRECTDRAWSURFACE lpBack;
LPDIRECTDRAWSURFACE lpBackOn;
LPDIRECTDRAWSURFACE lpOk;
LPDIRECTDRAWSURFACE lpCancel;
LPDIRECTDRAWSURFACE lpBut[4];
LPDIRECTDRAWSURFACE lpButd[4];
LPDIRECTDRAWSURFACE lpCredit;
LPDIRECTDRAWSURFACE lpOptions;
void ReadMisc(void)
{char File[20];
/*sprintf(File,"bmp\\wizard.bmp");
lpWizardBack=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpWizardBack,CLR_INVALID);
sprintf(File,"bmp\\bar_int.bmp");
lpSPBarOff[0]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOff[0],CLR_INVALID);
sprintf(File,"bmp\\bar_int2.bmp");
lpSPBarOn[0]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOn[0],CLR_INVALID);
sprintf(File,"bmp\\bar_ipx.bmp");
lpSPBarOff[1]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOff[1],CLR_INVALID);
sprintf(File,"bmp\\bar_ipx2.bmp");
lpSPBarOn[1]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOn[1],CLR_INVALID);
sprintf(File,"bmp\\bar_mod.bmp");
lpSPBarOff[2]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey( lpSPBarOff[2],CLR_INVALID);
sprintf(File,"bmp\\bar_mod2.bmp");
lpSPBarOn[2]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOn[2],CLR_INVALID);
sprintf(File,"bmp\\bar_com.bmp");
lpSPBarOff[3]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey( lpSPBarOff[3],CLR_INVALID);
sprintf(File,"bmp\\bar_com2.bmp");
lpSPBarOn[3]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpSPBarOn[3],CLR_INVALID);
sprintf(File,"bmp\\radioup.bmp");
lpRadioUp=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpRadioUp,CLR_INVALID);
sprintf(File,"bmp\\radiodn.bmp");
lpRadioDn=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpRadioDn,CLR_INVALID);
sprintf(File,"bmp\\pageup.bmp");
lpPageUp=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpPageUp,CLR_INVALID);
sprintf(File,"bmp\\pageup2.bmp");
lpPageUp2=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpPageUp2,CLR_INVALID);
sprintf(File,"bmp\\pagedn.bmp");
lpPageDn=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpPageDn,CLR_INVALID);
sprintf(File,"bmp\\pagedn2.bmp");
lpPageDn2=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpPageDn2,CLR_INVALID);
sprintf(File,"bmp\\hostbar.bmp");
lpHostBar=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpHostBar,CLR_INVALID);
sprintf(File,"bmp\\hostbar2.bmp");
lpHostBar2=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpHostBar2,CLR_INVALID);
sprintf(File,"bmp\\joinbar.bmp");
lpJoinBar=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpJoinBar,CLR_INVALID);
sprintf(File,"bmp\\joinbar2.bmp");
lpJoinBar2=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpJoinBar2,CLR_INVALID);
sprintf(File,"bmp\\panel.bmp");
lpPanel=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpPanel,CLR_INVALID);
sprintf(File,"bmp\\input1.bmp");
lpInput1=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpInput1,CLR_INVALID);
sprintf(File,"bmp\\input2.bmp");
lpInput2=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpInput2,CLR_INVALID);
sprintf(File,"bmp\\input3.bmp");
lpInput3=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpInput3,CLR_INVALID);
sprintf(File,"bmp\\backup.bmp");
lpBack=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpBack,CLR_INVALID);
sprintf(File,"bmp\\backon.bmp");
lpBackOn=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpBackOn,CLR_INVALID);
sprintf(File,"bmp\\okup.bmp");
lpOk=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpOk,CLR_INVALID);
sprintf(File,"bmp\\cancelup.bmp");
lpCancel=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpCancel,CLR_INVALID);
*/
sprintf(File,"bmp\\credit.bmp");
lpCredit=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpCredit,CLR_INVALID);
sprintf(File,"bmp\\options.bmp");
lpOptions=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpCredit,CLR_INVALID);
for(int i=0;i<4;i++)
{sprintf(File,"bmp\\but%d.bmp",i);
lpBut[i]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpBut[i],CLR_INVALID);
}
for(int l=0;l<4;l++)
{sprintf(File,"bmp\\butd%d.bmp",l);
lpButd[l]=DDLoadBitmap(lpDD,File,0,0);
DDSetColorKey(lpButd[l],CLR_INVALID);
}
}
void ReleaseMisc(void)
{int i;
/* if(lpWizardBack!=NULL)
{ lpWizardBack->Release();
lpWizardBack=NULL;
}
for(i=0;i<4;i++)
if(lpSPBarOff[i]!=NULL)
{ lpSPBarOff[i]->Release();
lpSPBarOff[i]!=NULL;
}
for(i=0;i<4;i++)
if(lpSPBarOn[i]!=NULL)
{ lpSPBarOn[i]->Release();
lpSPBarOn[i]!=NULL;
}
if(lpRadioUp!=NULL)
{ lpRadioUp->Release();
lpRadioUp=NULL;
}
if(lpRadioDn!=NULL)
{ lpRadioDn->Release();
lpRadioDn=NULL;
}
if(lpPageUp!=NULL)
{ lpPageUp->Release();
lpPageUp=NULL;
}
if(lpPageUp2!=NULL)
{ lpPageUp2->Release();
lpPageUp2=NULL;
}
if(lpPageDn!=NULL)
{ lpPageDn->Release();
lpPageDn=NULL;
}
if(lpPageDn2!=NULL)
{ lpPageDn2->Release();
lpPageDn2=NULL;
}
if(lpHostBar!=NULL)
{ lpHostBar->Release();
lpHostBar=NULL;
}
if(lpHostBar2!=NULL)
{ lpHostBar2->Release();
lpHostBar2=NULL;
}
if(lpJoinBar!=NULL)
{ lpJoinBar->Release();
lpJoinBar=NULL;
}
if(lpJoinBar2!=NULL)
{ lpJoinBar2->Release();
lpJoinBar2=NULL;
}
if(lpPanel!=NULL)
{ lpPanel->Release();
lpPanel=NULL;
}
if(lpInput1!=NULL)
{ lpInput1->Release();
lpInput1=NULL;
}
if(lpInput2!=NULL)
{ lpInput2->Release();
lpInput2=NULL;
}
if(lpInput3!=NULL)
{ lpInput3->Release();
lpInput3=NULL;
}
if(lpOk!=NULL)
{ lpOk->Release();
lpOk=NULL;
}
if(lpBack!=NULL)
{ lpBack->Release();
lpBack=NULL;
}
if(lpBackOn!=NULL)
{ lpBackOn->Release();
lpBack=NULL;
}
if(lpCancel!=NULL)
{ lpCancel->Release();
lpCancel=NULL;
}
*/
if(lpCredit!=NULL)
{ lpCredit->Release();
lpCredit=NULL;
}
if(lpOptions!=NULL)
{ lpOptions->Release();
lpOptions=NULL;
}
for(int n=0;n<4;n++)
{if(lpBut[n]!=NULL)
lpBut[n]->Release();
lpBut[n]=NULL;
}
for(int m=0;m<4;m++)
{if(lpButd[m]!=NULL)
lpButd[m]->Release();
lpButd[m]=NULL;
}
}
/*
* DoWizard
*
* Creates and launches a wizard (property sheets) for user input
*/
GUID WINAPI DoWizard(LPVOID pv)
{
//process user control;
ReadMisc();
WizardProgress=MAINMENU;
gnSP=0;//index
gdwKeys=0;
// InitWizardWindow();
WizardBlt(MAINMENU);
while( ProcessInput() )
{}
if(ProgramState==MUD)
// was communication initialized correctly ?
{if (bConnected)
{
// if so, launch game
PostMessage( ghWndMain, UM_LAUNCH, 0, 0 );
}
else
{
// otherwise, abort game
PostMessage( ghWndMain, UM_ABORT, 0, 0 );
}
}
ReleaseMisc();
return(gSPGuid);
}
BOOL ProcessInput(void)
{//Read data from input
DIMOUSESTATE mousedata;
POINT mousepos;
int ls=gnSP;
BOOL fresh=FALSE;
int lm=menustate;
int ch;
int i;
HDC hDC;
int strnum=0;
gdwKeys=DI_ReadKeys(gdwKeys);
lpDDSPrimary->Flip(NULL,0);
if(gdwKeys & KEY_DOWN)
{
if(WizardProgress==MAINMENU)
{//if(menustate==3)
//Blt(lpDDSBack,200,100,240,50,lpButd[0],0,0);
Blt(lpDDSBack,200,100+60*menustate,240,50,lpButd[menustate],0,0);
menustate++;
if(menustate==4)menustate-=4;
Blt(lpDDSBack,200,100+60*menustate,240,50,lpBut[menustate],0,0);
lpDDSPrimary->Flip(NULL,0);
while(gdwKeys==DI_ReadKeys(gdwKeys))
{};
return TRUE;
}
else if(WizardProgress==CHOOSESP)
{if(gnSP==4)
Blt(lpDDSBack,288,150+gnSP*40,68,36,lpBack,0,0);
else
Blt(lpDDSBack,200,150+gnSP*40,238,29,lpSPBarOff[gnSP],0,0);
gnSP++;
if(gnSP==5)gnSP-=5;
if(gnSP==4)
Blt(lpDDSBack,288,150+gnSP*40,68,36,lpBackOn,0,0);
else
Blt(lpDDSBack,200,150+gnSP*40,238,29,lpSPBarOn[gnSP],0,0);
}
lpDDSPrimary->Flip(NULL,0);
while(gdwKeys==DI_ReadKeys(gdwKeys))
{};
return TRUE;
}
if((gdwKeys & KEY_RETURN))
{while(gdwKeys==DI_ReadKeys(gdwKeys))
{};
gdwKeys &=~KEY_RETURN;
if(WizardProgress==MAINMENU)
{if(menustate==0){ProgramState=ALONE;
return FALSE;}
if(menustate==1){WizardProgress=OPTIONS;
WizardBlt(OPTIONS);}
if(menustate==2){WizardProgress=CREDIT;
WizardBlt(CREDIT);}
if(menustate==3){ProgramState=EXIT;
PostMessage( ghWndMain, UM_ABORT, 0, 0 );
return FALSE;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -