windows-nt/Source/XPSP1/NT/printscan/fax/samples/ncfsp/acctwiz.cpp
2020-09-26 16:20:57 +08:00

1259 lines
42 KiB
C++

#include "nc.h"
#pragma hdrstop
typedef struct _NCACCTINFO NCACCTINFO, *LPNCACCTINFO;
typedef BOOL (CALLBACK* NCDLGPROC)(HWND, UINT, WPARAM, LPARAM, LPNCACCTINFO);
typedef HPROPSHEETPAGE *LPHPROPSHEETPAGE;
typedef struct _NCACCTINFO {
CNcConnectionInfo connInfo;
CNcAccountInfo accountInfo;
CNcUser accountOwner;
CNcUser billingOwner;
const AccountInfoServer *pServer;
const AccountInfoPlan *pPlan;
CHAR ServerName[LT_SERVER_NAME+1];
CHAR FirstName[LT_FIRST_NAME+1];
CHAR LastName[LT_LAST_NAME+1];
CHAR Email[LT_EMAIL+1];
CHAR PhoneNumber[LT_PHONE_NUMBER+1];
CHAR AreaCode[LT_AREA_CODE+1];
CHAR Address[LT_ADDRESS+1];
CHAR City[LT_CITY+1];
CHAR State[LT_STATE+1];
CHAR Zip[LT_ZIP+1];
CHAR AccountName[LT_ACCOUNT_NAME+1];
CHAR Password[LT_PASSWORD+1];
CHAR CreditCard[LT_CREDIT_CARD+1];
CHAR ExpiryMM[LT_EXPIRY_MM+1];
CHAR ExpiryYY[LT_EXPIRY_YY+1];
CHAR CCName[LT_CC_NAME+1];
CHAR CCType[32];
} NCACCTINFO, *LPNCACCTINFO;
typedef struct _WIZPAGE {
UINT ButtonState;
UINT HelpContextId;
LPTSTR Title;
DWORD PageId;
NCDLGPROC DlgProc;
PROPSHEETPAGE Page;
LPNCACCTINFO NcAcctInfo;
} WIZPAGE, *PWIZPAGE;
typedef enum {
WizPageServerName,
WizPageIsp,
WizPagePlans,
WizPageInfo,
WizPageInfo2,
WizPageAccount,
WizPageBilling,
WizPageFinish,
WizPageCreate,
WizPageMaximum
} WizPage;
BOOL CALLBACK
CommonDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
BOOL CALLBACK
ServerNameDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
Info2DlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
InfoDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
AccountDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
BillingDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
IspDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
PlansDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
CreateDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
BOOL CALLBACK
FinishDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
);
WIZPAGE WizardPages[WizPageMaximum] =
{
//
// server name page
//
{
PSWIZB_NEXT, // valid buttons
0, // help id
NULL, // title
WizPageServerName, // page id
ServerNameDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_SERVER_NAME_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// isp page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageIsp, // page id
IspDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_ISP_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// plans page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPagePlans, // page id
PlansDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_PLANS_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// info page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageInfo, // page id
InfoDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_INFO_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// info2 page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageInfo2, // page id
Info2DlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_INFO2_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// account page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageAccount, // page id
AccountDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_ACCT_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// billing page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageBilling, // page id
BillingDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_BILLING_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// account creation page
//
{
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageCreate, // page id
CreateDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_CREATE_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}},
//
// finish page
//
{
PSWIZB_FINISH | PSWIZB_BACK, // valid buttons
0, // help id
NULL, // title
WizPageFinish, // page id
FinishDlgProc, // dlg proc
{ sizeof(PROPSHEETPAGE), // size of struct
0, // flags
NULL, // hinst (filled in at run time)
MAKEINTRESOURCE(IDD_FINISH_PAGE), // dlg template
NULL, // icon
NULL, // title
(DLGPROC)CommonDlgProc, // dlg proc
0, // lparam
NULL, // callback
NULL // ref count
}}
};
LPHPROPSHEETPAGE
CreateWizardPages(
LPNCACCTINFO NcAcctInfo
)
{
LPHPROPSHEETPAGE WizardPageHandles;
DWORD i;
//
// allocate the page handle array
//
WizardPageHandles = (HPROPSHEETPAGE*) MemAlloc(
sizeof(HPROPSHEETPAGE) * WizPageMaximum
);
if (!WizardPageHandles) {
return NULL;
}
//
// Create each page.
//
for(i=0; i<WizPageMaximum; i++) {
WizardPages[i].Page.hInstance = MyhInstance;
WizardPages[i].Page.dwFlags |= PSP_USETITLE;
WizardPages[i].NcAcctInfo = NcAcctInfo;
WizardPages[i].Page.lParam = (LPARAM) &WizardPages[i];
WizardPageHandles[i] = CreatePropertySheetPage( &WizardPages[i].Page );
if (!WizardPageHandles[i]) {
MemFree( WizardPageHandles );
return NULL;
}
}
return WizardPageHandles;
}
int
CALLBACK
WizardCallback(
IN HWND hdlg,
IN UINT code,
IN LPARAM lParam
)
{
DLGTEMPLATE *DlgTemplate;
//
// Get rid of context sensitive help control on title bar
//
if(code == PSCB_PRECREATE) {
DlgTemplate = (DLGTEMPLATE *)lParam;
DlgTemplate->style &= ~DS_CONTEXTHELP;
}
return 0;
}
BOOL
CreateNewAccount(
HWND hDlg
)
{
PROPSHEETHEADER psh;
LPHPROPSHEETPAGE WizPages;
NCACCTINFO NcAcctInfo;
WizPages = CreateWizardPages( &NcAcctInfo );
if (!WizPages) {
return FALSE;
}
//
// create the property sheet
//
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_WIZARD | PSH_USECALLBACK;
psh.hwndParent = hDlg;
psh.hInstance = MyhInstance;
psh.pszIcon = NULL;
psh.pszCaption = TEXT("NetCentric Internet Fax Account Wizard");
psh.nPages = WizPageMaximum;
psh.nStartPage = 0;
psh.phpage = WizPages;
psh.pfnCallback = WizardCallback;
if (PropertySheet( &psh ) == -1) {
return FALSE;
}
return TRUE;
}
BOOL CALLBACK
CommonDlgProc(
HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
PWIZPAGE WizPage;
WizPage = (PWIZPAGE) GetWindowLong( hwnd, DWL_USER );
switch( msg ) {
case WM_INITDIALOG:
SetWindowLong( hwnd, DWL_USER, (LONG) ((LPPROPSHEETPAGE) lParam)->lParam );
WizPage = (PWIZPAGE) ((LPPROPSHEETPAGE) lParam)->lParam;
SetWindowText( GetParent( hwnd ), TEXT("NetCentric Internet Fax Account Wizard") );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
PropSheet_SetWizButtons(
GetParent(hwnd),
WizPage->ButtonState
);
SetWindowLong( hwnd, DWL_MSGRESULT, 0 );
break;
}
break;
}
if (WizPage && WizPage->DlgProc) {
return WizPage->DlgProc( hwnd, msg, wParam, lParam, WizPage->NcAcctInfo );
}
return FALSE;
}
BOOL CALLBACK
ServerNameDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
HCURSOR Hourglass;
HCURSOR OldCursor;
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hDlg, IDC_SERVER_NAME, EM_SETLIMITTEXT, LT_SERVER_NAME, 0 );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
break;
case PSN_WIZNEXT:
if (!GetDlgItemTextA( hDlg, IDC_SERVER_NAME, NcAcctInfo->ServerName, LT_SERVER_NAME )) {
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
//
// Get the POPserver name from the user (e.g., spop.server.net). This
// will be used as the "initial" server for obtaining the list
// of Service Providers who offer the faxing service.
//
if (!NcAcctInfo->connInfo.SetHostName(NcAcctInfo->ServerName)) {
PopUpMsg( hDlg, IDS_BAD_SERVER, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
NcAcctInfo->connInfo.SetPortNumber( 80, FALSE );
//
// Tell the accountInfo about the connection object. This
// CNcConnectionInfo object contains hostname/port/proxy/account
// information.
//
if (!NcAcctInfo->accountInfo.SetConnectionInfo(&NcAcctInfo->connInfo)) {
PopUpMsg( hDlg, IDS_BAD_SERVER, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
//
// get the isp list
//
Hourglass = LoadCursor( NULL, IDC_WAIT );
OldCursor = SetCursor( Hourglass );
if (!NcAcctInfo->accountInfo.GetAccountServers()) {
SetCursor( OldCursor );
PopUpMsg( hDlg, IDS_BAD_SERVER, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
SetCursor( OldCursor );
break;
}
break;
}
return FALSE;
}
BOOL CALLBACK
IspDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
static HWND hwndList;
static int SelectedIsp;
const AccountInfoServer *pServer;
AccountServerIndex serverLoopIndex;
HIMAGELIST himlState;
LV_ITEMA lvi;
LV_COLUMN lvc = {0};
int index;
HCURSOR Hourglass;
HCURSOR OldCursor;
switch( message ) {
case WM_INITDIALOG:
hwndList = GetDlgItem( hDlg, IDC_ISP_LIST );
SelectedIsp = 0;
//
// set/initialize the image list(s)
//
himlState = ImageList_Create( 16, 16, TRUE, 2, 0 );
ImageList_AddMasked(
himlState,
LoadBitmap( MyhInstance, MAKEINTRESOURCE(IDB_CHECKSTATES) ),
RGB (255,0,0)
);
ListView_SetImageList( hwndList, himlState, LVSIL_STATE );
//
// set/initialize the columns
//
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = 250;
lvc.pszText = L"Service Provider";
lvc.iSubItem = 0;
ListView_InsertColumn( hwndList, lvc.iSubItem, &lvc );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
ListView_DeleteAllItems( hwndList );
serverLoopIndex = 0;
ZeroMemory( &lvi, sizeof(lvi) );
pServer = NcAcctInfo->accountInfo.GetFirstAccountServer(&serverLoopIndex);
while (pServer) {
lvi.pszText = pServer->description;
lvi.iItem += 1;
lvi.iSubItem = 0;
lvi.iImage = 0;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvi.state = lvi.iItem-1 == SelectedIsp ? LVIS_GCCHECK : LVIS_GCNOCHECK;
lvi.stateMask = LVIS_STATEIMAGEMASK;
SendMessageA( hwndList, LVM_INSERTITEMA, 0, (LPARAM) &lvi );
pServer = NcAcctInfo->accountInfo.GetNextAccountServer(&serverLoopIndex);
}
break;
case PSN_WIZNEXT:
serverLoopIndex = 0;
index = 0;
pServer = NcAcctInfo->accountInfo.GetFirstAccountServer(&serverLoopIndex);
while (pServer && index != SelectedIsp) {
pServer = NcAcctInfo->accountInfo.GetNextAccountServer(&serverLoopIndex);
index += 1;
}
if (!pServer) {
PopUpMsg( hDlg, IDS_BAD_SERVER, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
NcAcctInfo->pServer = pServer;
//
// Now use the selected server for our connectionInfo object. This
// will be the server we use to create the actual account, for the
// selected ISP. Once set in the CNcConnectionInfo object, set that
// connInfo object in the accountInfo.
//
if (!NcAcctInfo->connInfo.SetHostName( pServer->name )) {
PopUpMsg( hDlg, IDS_BAD_ISP, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
if (!NcAcctInfo->accountInfo.SetConnectionInfo(&NcAcctInfo->connInfo)) {
PopUpMsg( hDlg, IDS_BAD_ISP, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
//
// get the plan list
//
Hourglass = LoadCursor( NULL, IDC_WAIT );
OldCursor = SetCursor( Hourglass );
if (!NcAcctInfo->accountInfo.GetPlanInformation()) {
SetCursor( OldCursor );
PopUpMsg( hDlg, IDS_BAD_ISP, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
SetCursor( OldCursor );
break;
case NM_CLICK:
{
DWORD dwpos;
LV_HITTESTINFO lvhti;
int iItemClicked;
UINT state;
//
// Find out where the cursor was
//
dwpos = GetMessagePos();
lvhti.pt.x = LOWORD(dwpos);
lvhti.pt.y = HIWORD(dwpos);
MapWindowPoints( HWND_DESKTOP, hwndList, &lvhti.pt, 1 );
//
// Now do a hittest with this point.
//
iItemClicked = ListView_HitTest( hwndList, &lvhti );
if (lvhti.flags & LVHT_ONITEMSTATEICON) {
//
// Now lets get the state from the item and toggle it.
//
state = ListView_GetItemState(
hwndList,
iItemClicked,
LVIS_STATEIMAGEMASK
);
if (state == LVIS_GCCHECK) {
MessageBeep(0);
break;
}
state = (state == LVIS_GCNOCHECK) ? LVIS_GCCHECK : LVIS_GCNOCHECK;
ListView_SetItemState(
hwndList,
SelectedIsp,
LVIS_GCNOCHECK,
LVIS_STATEIMAGEMASK
);
ListView_SetItemState(
hwndList,
iItemClicked,
state,
LVIS_STATEIMAGEMASK
);
SelectedIsp = iItemClicked;
}
}
}
break;
}
return FALSE;
}
BOOL CALLBACK
PlansDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
static HWND hwndList;
static int SelectedPlan;
const AccountInfoPlan *pPlan;
AccountPlanIndex planLoopIndex;
HIMAGELIST himlState;
LV_ITEMA lvi;
LV_COLUMN lvc = {0};
int index;
switch( message ) {
case WM_INITDIALOG:
hwndList = GetDlgItem( hDlg, IDC_PLAN_LIST );
SelectedPlan = 0;
//
// set/initialize the image list(s)
//
himlState = ImageList_Create( 16, 16, TRUE, 2, 0 );
ImageList_AddMasked(
himlState,
LoadBitmap( MyhInstance, MAKEINTRESOURCE(IDB_CHECKSTATES) ),
RGB (255,0,0)
);
ListView_SetImageList( hwndList, himlState, LVSIL_STATE );
//
// set/initialize the columns
//
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = 250;
lvc.pszText = L"Plans";
lvc.iSubItem = 0;
ListView_InsertColumn( hwndList, lvc.iSubItem, &lvc );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
ListView_DeleteAllItems( hwndList );
planLoopIndex = 0;
ZeroMemory( &lvi, sizeof(lvi) );
pPlan = NcAcctInfo->accountInfo.GetFirstPlan(&planLoopIndex);
while (pPlan) {
lvi.pszText = pPlan->planDescription;
lvi.iItem += 1;
lvi.iSubItem = 0;
lvi.iImage = 0;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvi.state = lvi.iItem-1 == SelectedPlan ? LVIS_GCCHECK : LVIS_GCNOCHECK;
lvi.stateMask = LVIS_STATEIMAGEMASK;
SendMessageA( hwndList, LVM_INSERTITEMA, 0, (LPARAM) &lvi );
pPlan = NcAcctInfo->accountInfo.GetNextPlan(&planLoopIndex);
}
break;
case PSN_WIZNEXT:
planLoopIndex = 0;
index = 0;
pPlan = NcAcctInfo->accountInfo.GetFirstPlan(&planLoopIndex);
while (pPlan && index != SelectedPlan) {
pPlan = NcAcctInfo->accountInfo.GetNextPlan(&planLoopIndex);
index += 1;
}
if (!pPlan) {
PopUpMsg( hDlg, IDS_BAD_SERVER, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
NcAcctInfo->pPlan = pPlan;
break;
case NM_CLICK:
{
DWORD dwpos;
LV_HITTESTINFO lvhti;
int iItemClicked;
UINT state;
//
// Find out where the cursor was
//
dwpos = GetMessagePos();
lvhti.pt.x = LOWORD(dwpos);
lvhti.pt.y = HIWORD(dwpos);
MapWindowPoints( HWND_DESKTOP, hwndList, &lvhti.pt, 1 );
//
// Now do a hittest with this point.
//
iItemClicked = ListView_HitTest( hwndList, &lvhti );
if (lvhti.flags & LVHT_ONITEMSTATEICON) {
//
// Now lets get the state from the item and toggle it.
//
state = ListView_GetItemState(
hwndList,
iItemClicked,
LVIS_STATEIMAGEMASK
);
if (state == LVIS_GCCHECK) {
MessageBeep(0);
break;
}
state = (state == LVIS_GCNOCHECK) ? LVIS_GCCHECK : LVIS_GCNOCHECK;
ListView_SetItemState(
hwndList,
SelectedPlan,
LVIS_GCNOCHECK,
LVIS_STATEIMAGEMASK
);
ListView_SetItemState(
hwndList,
iItemClicked,
state,
LVIS_STATEIMAGEMASK
);
SelectedPlan = iItemClicked;
}
}
}
break;
}
return FALSE;
}
BOOL CALLBACK
InfoDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hDlg, IDC_FIRST_NAME, EM_SETLIMITTEXT, LT_FIRST_NAME, 0 );
SendDlgItemMessage( hDlg, IDC_LAST_NAME, EM_SETLIMITTEXT, LT_LAST_NAME, 0 );
SendDlgItemMessage( hDlg, IDC_ADDRESS, EM_SETLIMITTEXT, LT_ADDRESS, 0 );
SendDlgItemMessage( hDlg, IDC_CITY, EM_SETLIMITTEXT, LT_CITY, 0 );
SendDlgItemMessage( hDlg, IDC_STATE, EM_SETLIMITTEXT, LT_STATE, 0 );
SendDlgItemMessage( hDlg, IDC_ZIP, EM_SETLIMITTEXT, LT_ZIP, 0 );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
break;
case PSN_WIZNEXT:
GetDlgItemTextA( hDlg, IDC_FIRST_NAME, NcAcctInfo->FirstName, LT_FIRST_NAME );
GetDlgItemTextA( hDlg, IDC_LAST_NAME, NcAcctInfo->LastName, LT_LAST_NAME );
GetDlgItemTextA( hDlg, IDC_ADDRESS, NcAcctInfo->Address, LT_ADDRESS );
GetDlgItemTextA( hDlg, IDC_CITY, NcAcctInfo->City, LT_CITY );
GetDlgItemTextA( hDlg, IDC_STATE, NcAcctInfo->State, LT_STATE );
GetDlgItemTextA( hDlg, IDC_ZIP, NcAcctInfo->Zip, LT_ZIP );
if (NcAcctInfo->FirstName[0] == 0 ||
NcAcctInfo->LastName[0] == 0 ||
NcAcctInfo->Address[0] == 0 ||
NcAcctInfo->City[0] == 0 ||
NcAcctInfo->State[0] == 0 ||
NcAcctInfo->Zip[0] == 0)
{
//
// all fields are required
// if we get here then the user forgot to
// enter data into one of the fields
//
PopUpMsg( hDlg, IDS_MISSING_INFO, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
}
break;
}
return FALSE;
}
BOOL CALLBACK
Info2DlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hDlg, IDC_EMAIL, EM_SETLIMITTEXT, LT_EMAIL, 0 );
SendDlgItemMessage( hDlg, IDC_PHONE_NUMBER, EM_SETLIMITTEXT, LT_PHONE_NUMBER, 0 );
SendDlgItemMessage( hDlg, IDC_AREA_CODE, EM_SETLIMITTEXT, LT_AREA_CODE, 0 );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
break;
case PSN_WIZNEXT:
GetDlgItemTextA( hDlg, IDC_EMAIL, NcAcctInfo->Email, LT_EMAIL );
GetDlgItemTextA( hDlg, IDC_PHONE_NUMBER, NcAcctInfo->PhoneNumber, LT_PHONE_NUMBER );
GetDlgItemTextA( hDlg, IDC_AREA_CODE, NcAcctInfo->AreaCode, LT_AREA_CODE );
if (NcAcctInfo->Email[0] == 0 ||
NcAcctInfo->PhoneNumber[0] == 0 ||
NcAcctInfo->AreaCode[0] == 0)
{
//
// all fields are required
// if we get here then the user forgot to
// enter data into one of the fields
//
PopUpMsg( hDlg, IDS_MISSING_INFO, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
if (!NcAcctInfo->accountOwner.SetFirstName( NcAcctInfo->FirstName ) ||
!NcAcctInfo->accountOwner.SetLastName( NcAcctInfo->LastName ) ||
!NcAcctInfo->accountOwner.SetEmail( NcAcctInfo->Email ) ||
!NcAcctInfo->accountOwner.SetFirstAddress( NcAcctInfo->Address ) ||
!NcAcctInfo->accountOwner.SetAddressZipcode( NcAcctInfo->Zip ) ||
!NcAcctInfo->accountOwner.SetPhoneNumber( "1", NcAcctInfo->AreaCode, NcAcctInfo->PhoneNumber, NULL ))
{
PopUpMsg( hDlg, IDS_MISSING_INFO, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
}
break;
}
return FALSE;
}
BOOL CALLBACK
AccountDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hDlg, IDC_ACCOUNT_NAME, EM_SETLIMITTEXT, LT_ACCOUNT_NAME, 0 );
SendDlgItemMessage( hDlg, IDC_PASSWORD, EM_SETLIMITTEXT, LT_PASSWORD, 0 );
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
if (!NcAcctInfo->pPlan->passwordRequired) {
EnableWindow( GetDlgItem( hDlg, IDC_PASSWORD ), FALSE );
} else {
EnableWindow( GetDlgItem( hDlg, IDC_PASSWORD ), TRUE );
}
break;
case PSN_WIZNEXT:
GetDlgItemTextA( hDlg, IDC_ACCOUNT_NAME, NcAcctInfo->AccountName, LT_ACCOUNT_NAME );
GetDlgItemTextA( hDlg, IDC_PASSWORD, NcAcctInfo->Password, LT_PASSWORD );
if (NcAcctInfo->AccountName[0] == 0 ||
(NcAcctInfo->pPlan->passwordRequired && NcAcctInfo->Password[0] == 0))
{
PopUpMsg( hDlg, IDS_MISSING_ACCNT, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
if (!NcAcctInfo->accountInfo.SetPassword( NcAcctInfo->Password )) {
PopUpMsg( hDlg, IDS_MISSING_ACCNT, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
}
break;
}
return FALSE;
}
BOOL CALLBACK
BillingDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
int i;
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hDlg, IDC_CREDIT_CARD, EM_SETLIMITTEXT, LT_CREDIT_CARD, 0 );
SendDlgItemMessage( hDlg, IDC_EXPIRY_MM, EM_SETLIMITTEXT, LT_EXPIRY_MM, 0 );
SendDlgItemMessage( hDlg, IDC_EXPIRY_YY, EM_SETLIMITTEXT, LT_EXPIRY_YY, 0 );
SendDlgItemMessage( hDlg, IDC_CC_NAME, EM_SETLIMITTEXT, LT_CC_NAME, 0 );
for (i=IDS_CC_FIRST; i<IDS_CC_LAST; i++) {
SendDlgItemMessage( hDlg, IDC_CC_LIST, CB_ADDSTRING, 0, (LPARAM) GetString( i ) );
if (i == IDS_CC_VISA) {
SendDlgItemMessage( hDlg, IDC_CC_LIST, CB_SETCURSEL, i-IDS_CC_FIRST, 0 );
}
}
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
if (!NcAcctInfo->pPlan->paymentRequired) {
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
case PSN_WIZNEXT:
GetDlgItemTextA( hDlg, IDC_CREDIT_CARD, NcAcctInfo->CreditCard, LT_CREDIT_CARD );
GetDlgItemTextA( hDlg, IDC_EXPIRY_MM, NcAcctInfo->ExpiryMM, LT_EXPIRY_MM );
GetDlgItemTextA( hDlg, IDC_EXPIRY_YY, NcAcctInfo->ExpiryYY, LT_EXPIRY_YY );
GetDlgItemTextA( hDlg, IDC_CC_NAME, NcAcctInfo->CCName, LT_CC_NAME );
switch( SendDlgItemMessage( hDlg, IDC_CC_LIST, CB_GETCURSEL, 0, 0 )) {
case 0:
strcpy( NcAcctInfo->CCType, AMERICAN_EXPRESS );
break;
case 1:
strcpy( NcAcctInfo->CCType, DINERS_CLUB );
break;
case 2:
strcpy( NcAcctInfo->CCType, DISCOVER );
break;
case 3:
strcpy( NcAcctInfo->CCType, MASTER_CARD );
break;
case 4:
strcpy( NcAcctInfo->CCType, VISA );
break;
}
if (NcAcctInfo->CreditCard[0] == 0 ||
NcAcctInfo->ExpiryMM[0] == 0 ||
NcAcctInfo->ExpiryYY[0] == 0 ||
NcAcctInfo->CCName[0] == 0)
{
PopUpMsg( hDlg, IDS_MISSING_BILLING, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
if (!NcAcctInfo->accountInfo.SetBillingUser(&NcAcctInfo->billingOwner) ||
!NcAcctInfo->accountInfo.SetCreditCardType( NcAcctInfo->CCType ) ||
!NcAcctInfo->accountInfo.SetCreditCardNumber( NcAcctInfo->CreditCard ) ||
!NcAcctInfo->accountInfo.SetCreditCardExpirationMM( NcAcctInfo->ExpiryMM ) ||
!NcAcctInfo->accountInfo.SetCreditCardExpirationYY( NcAcctInfo->ExpiryYY ) ||
!NcAcctInfo->accountInfo.SetCreditCardOwner( NcAcctInfo->CCName ))
{
PopUpMsg( hDlg, IDS_MISSING_BILLING, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
}
break;
}
return FALSE;
}
BOOL CALLBACK
CreateDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
HCURSOR Hourglass;
HCURSOR OldCursor;
switch( message ) {
case WM_INITDIALOG:
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
break;
case PSN_WIZNEXT:
Hourglass = LoadCursor( NULL, IDC_WAIT );
OldCursor = SetCursor( Hourglass );
if (!NcAcctInfo->accountInfo.SetOwner(&NcAcctInfo->accountOwner) ||
!NcAcctInfo->accountInfo.SetPlan(NcAcctInfo->pPlan) ||
!NcAcctInfo->accountInfo.SetAccountName( NcAcctInfo->AccountName ))
{
SetCursor( OldCursor );
PopUpMsg( hDlg, IDS_MISSING_BILLING, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
//
// Submit the new account information to the server. If the server
// can create the account, the SubmitAccountInfo() function will
// return TRUE. If the server rejects the information, FALSE will
// be returned. The error printed out will describe what went
// wrong, from unable to communicate with server to invalid
// account information. For example, the server would tell
// the calling application that the accountName has already been
// taken.
//
if (!NcAcctInfo->accountInfo.SubmitAccountInfo()) {
CHAR buffer[256]; UINT size=sizeof(buffer);
SetCursor( OldCursor );
NcAcctInfo->accountInfo.GetLastErrorString(buffer, &size);
PopUpMsgString( hDlg, buffer, TRUE, 0 );
SetWindowLong( hDlg, DWL_MSGRESULT, -1 );
return TRUE;
}
SetCursor( OldCursor );
break;
}
break;
}
return FALSE;
}
BOOL CALLBACK
FinishDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam,
LPNCACCTINFO NcAcctInfo
)
{
switch( message ) {
case WM_INITDIALOG:
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
break;
case PSN_WIZNEXT:
break;
}
break;
}
return FALSE;
}