|
|
//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1994 **
//*********************************************************************
//
// PAYMENT.CPP - Functions for
//
// HISTORY:
//
// 05/13/98 donaldm Created.
// 08/19/98 donaldm BUGBUG: The code to collect and save the user
// entered data is not optimal in terms of size
// and can/should be cleaned up at some future time
//
//*********************************************************************
#include "pre.h"
// Dialog handles for the different payment methods, which will be nested into our mail dialog
HWND hDlgCreditCard = NULL; HWND hDlgInvoice = NULL; HWND hDlgPhoneBill = NULL; HWND hDlgCustom = NULL; HWND hDlgCurrentPaymentType = NULL; BOOL g_bCustomPaymentActive = FALSE; WORD wCurrentPaymentType = PAYMENT_TYPE_INVALID; // NOTE: this must be initialize to a value
HACCEL hAccelCreditCard = NULL; HACCEL hAccelInvoice = NULL; HACCEL hAccelPhoneBill = NULL;
#define NUM_EXPIRE_YEARS 38
#define BASE_YEAR 1998
#define MAX_YEAR_LEN 5
#define NUM_EXPIRE_MONTHS 12
const TCHAR cszCustomPayment[] = TEXT("CUSTOMPAYMENT");
INT_PTR CALLBACK CreditCardPaymentDlgProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // Create a local reference for the ISPData object
IICWISPData *pISPData = gpWizardState->pISPData; // in order not to corrupt mem this guy must be big enough to hold
// fmax_firstname + "" + max last name
TCHAR szTemp[MAX_RES_LEN*2 + 4] = TEXT("\0"); switch (uMsg) { case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: if(gpWizardState->cmnStateData.bOEMCustom) { SetTextColor((HDC)wParam, gpWizardState->cmnStateData.clrText); SetBkMode((HDC)wParam, TRANSPARENT); return (INT_PTR) GetStockObject(NULL_BRUSH); } break; case WM_INITDIALOG: { int i; // Initialize the fields we know about
SYSTEMTIME SystemTime; // system time structure
GetLocalTime(&SystemTime);
// Populate the Expires year listbox
ComboBox_ResetContent(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREYEAR)); TCHAR szYear[MAX_YEAR_LEN]; for (i = 0; i < NUM_EXPIRE_YEARS; i++) { wsprintf (szYear, TEXT("%4d"), i + BASE_YEAR); ComboBox_AddString(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREYEAR), szYear); } // Select the first year in the list if unselected
if (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREYEAR)) == -1) { ComboBox_SetCurSel( GetDlgItem(hDlg, IDC_PAYMENT_EXPIREYEAR), SystemTime.wYear - BASE_YEAR); } // Populate the Expires Month listbox
ComboBox_ResetContent(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREMONTH)); for (i = 0; i < NUM_EXPIRE_MONTHS; i++) { LoadString(ghInstanceResDll, IDS_JANUARY + i, szTemp, ARRAYSIZE(szTemp)); ComboBox_AddString(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREMONTH), szTemp); } // Select the first Month in the list if unselected
if (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREMONTH)) == -1) { ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREMONTH), SystemTime.wMonth - 1); } if (pISPData->GetDataElement(ISPDATA_USER_FE_NAME)) { lstrcpy(szTemp, pISPData->GetDataElement(ISPDATA_USER_FE_NAME)); SetDlgItemText(hDlg, IDC_PAYMENT_CCNAME, szTemp); } else { lstrcpy(szTemp, pISPData->GetDataElement(ISPDATA_USER_FIRSTNAME)); lstrcat(szTemp, TEXT(" ")); lstrcat(szTemp, pISPData->GetDataElement(ISPDATA_USER_LASTNAME)); SetDlgItemText(hDlg, IDC_PAYMENT_CCNAME, szTemp); } lstrcpy(szTemp, pISPData->GetDataElement(ISPDATA_USER_ADDRESS)); if (LCID_JPN != GetUserDefaultLCID()) { lstrcat(szTemp, TEXT(" ")); lstrcat(szTemp, pISPData->GetDataElement(ISPDATA_USER_MOREADDRESS)); } SetDlgItemText(hDlg, IDC_PAYMENT_CCADDRESS, szTemp);
SetDlgItemText(hDlg, IDC_PAYMENT_CCZIP, pISPData->GetDataElement(ISPDATA_USER_ZIP)); break; } // User clicked next, so we need to collect and validate dat
case WM_USER_NEXT: { CPAYCSV far *pcPAYCSV = (CPAYCSV far *)lParam; UINT uCtrlID; // If the ISP support LUHN, validate the content
if (pcPAYCSV->get_bLUHNCheck()) { uCtrlID = IDC_PAYMENT_CCNUMBER; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_CARDNUMBER, szTemp, ISPDATA_Validate_Content)) goto CreditCardPaymentOKError; } else { // no content validate, so just do data present validation
uCtrlID = IDC_PAYMENT_CCNUMBER; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_CARDNUMBER, szTemp, ISPDATA_Validate_DataPresent)) goto CreditCardPaymentOKError; } uCtrlID = IDC_PAYMENT_CCNAME; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_CARDHOLDER, szTemp, ISPDATA_Validate_DataPresent)) goto CreditCardPaymentOKError;
uCtrlID = IDC_PAYMENT_CCADDRESS; GetDlgItemText(hDlg, IDC_PAYMENT_CCADDRESS, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLADDRESS, szTemp, ISPDATA_Validate_DataPresent)) goto CreditCardPaymentOKError; uCtrlID = IDC_PAYMENT_CCZIP; GetDlgItemText(hDlg, IDC_PAYMENT_CCZIP, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLZIP, szTemp , ISPDATA_Validate_DataPresent)) goto CreditCardPaymentOKError;
// Month must be converted into numeric equivalent
_itot(ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PAYMENT_EXPIREMONTH)) + 1, szTemp, 10); pISPData->PutDataElement(ISPDATA_PAYMENT_EXMONTH, szTemp , ISPDATA_Validate_None);
uCtrlID = IDC_PAYMENT_EXPIREYEAR; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_EXYEAR, szTemp , ISPDATA_Validate_Content)) goto CreditCardPaymentOKError;
// OK to move on
SetPropSheetResult(hDlg,TRUE); return TRUE; CreditCardPaymentOKError: SetFocus(GetDlgItem(hDlg, uCtrlID)); SetPropSheetResult(hDlg, FALSE); return TRUE; } } // Default return value if message is not handled
return FALSE; }
INT_PTR CALLBACK InvoicePaymentDlgProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // Create a local reference for the ISPData object
IICWISPData *pISPData = gpWizardState->pISPData; TCHAR szTemp[MAX_RES_LEN] = TEXT("\0"); switch (uMsg) {
case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: if(gpWizardState->cmnStateData.bOEMCustom) { SetTextColor((HDC)wParam, gpWizardState->cmnStateData.clrText); SetBkMode((HDC)wParam, TRANSPARENT); return (INT_PTR) GetStockObject(NULL_BRUSH); } break; case WM_INITDIALOG: { SetDlgItemText(hDlg, IDC_PAYMENT_IVADDRESS1, pISPData->GetDataElement(ISPDATA_USER_ADDRESS)); SetDlgItemText(hDlg, IDC_PAYMENT_IVADDRESS2, pISPData->GetDataElement(ISPDATA_USER_MOREADDRESS)); SetDlgItemText(hDlg, IDC_PAYMENT_IVCITY, pISPData->GetDataElement(ISPDATA_USER_CITY)); SetDlgItemText(hDlg, IDC_PAYMENT_IVSTATE, pISPData->GetDataElement(ISPDATA_USER_STATE)); SetDlgItemText(hDlg, IDC_PAYMENT_IVZIP, pISPData->GetDataElement(ISPDATA_USER_ZIP)); break; } // User clicked next, so we need to collect entered data
case WM_USER_NEXT: { UINT uCtrlID; uCtrlID = IDC_PAYMENT_IVADDRESS1; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLADDRESS, szTemp, ISPDATA_Validate_DataPresent)) goto InvoicePaymentOKError;
uCtrlID = IDC_PAYMENT_IVADDRESS2; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLEXADDRESS, szTemp, ISPDATA_Validate_DataPresent)) goto InvoicePaymentOKError;
uCtrlID = IDC_PAYMENT_IVCITY; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLCITY, szTemp, ISPDATA_Validate_DataPresent)) goto InvoicePaymentOKError; uCtrlID = IDC_PAYMENT_IVSTATE; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLSTATE, szTemp, ISPDATA_Validate_DataPresent)) goto InvoicePaymentOKError;
uCtrlID = IDC_PAYMENT_IVZIP; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLZIP, szTemp, ISPDATA_Validate_DataPresent)) goto InvoicePaymentOKError;
SetPropSheetResult(hDlg,TRUE); return TRUE; InvoicePaymentOKError: SetFocus(GetDlgItem(hDlg, uCtrlID)); SetPropSheetResult(hDlg, FALSE); return TRUE; } } // Default return value if message is not handled
return FALSE; }
INT_PTR CALLBACK PhoneBillPaymentDlgProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // Create a local reference for the ISPData object
IICWISPData *pISPData = gpWizardState->pISPData; TCHAR szTemp[MAX_RES_LEN] = TEXT("\0"); switch (uMsg) {
case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: if(gpWizardState->cmnStateData.bOEMCustom) { SetTextColor((HDC)wParam, gpWizardState->cmnStateData.clrText); SetBkMode((HDC)wParam, TRANSPARENT); return (INT_PTR) GetStockObject(NULL_BRUSH); } break;
case WM_INITDIALOG: { TCHAR szTemp[MAX_RES_LEN]; lstrcpy(szTemp, pISPData->GetDataElement(ISPDATA_USER_FIRSTNAME)); lstrcat(szTemp, TEXT(" ")); lstrcat(szTemp, pISPData->GetDataElement(ISPDATA_USER_LASTNAME)); SetDlgItemText(hDlg, IDC_PAYMENT_PHONEIV_BILLNAME, szTemp); SetDlgItemText(hDlg, IDC_PAYMENT_PHONEIV_ACCNUM, pISPData->GetDataElement(ISPDATA_USER_PHONE)); break; } // User clicked next, so we need to collect and validate dat
case WM_USER_NEXT: { UINT uCtrlID; uCtrlID = IDC_PAYMENT_PHONEIV_BILLNAME; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLNAME, szTemp, ISPDATA_Validate_DataPresent)) goto PhoneBillPaymentOKError;
uCtrlID = IDC_PAYMENT_PHONEIV_ACCNUM; GetDlgItemText(hDlg, uCtrlID, szTemp, ARRAYSIZE(szTemp)); if (!pISPData->PutDataElement(ISPDATA_PAYMENT_BILLPHONE, szTemp, ISPDATA_Validate_DataPresent)) goto PhoneBillPaymentOKError;
SetPropSheetResult(hDlg,TRUE); return TRUE; PhoneBillPaymentOKError: SetFocus(GetDlgItem(hDlg, uCtrlID)); SetPropSheetResult(hDlg, FALSE); return TRUE; } } // Default return value if message is not handled
return FALSE; }
INT_PTR CALLBACK CustomPaymentDlgProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch (uMsg) { // This is custom, because for the custom page, we must connect to the window
// and browse everytime the custom pay page is activated, since an intervening
// step may have connected the browser to a different window
case WM_USER_CUSTOMINIT: { CPAYCSV far *pcPAYCSV = (CPAYCSV far *)lParam; gpWizardState->pICWWebView->ConnectToWindow(GetDlgItem(hDlg, IDC_PAYMENT_CUSTOM_INV), PAGETYPE_CUSTOMPAY);
// Navigate to the Custom Payment HTML
gpWizardState->lpSelectedISPInfo->DisplayHTML(pcPAYCSV->get_szCustomPayURLPath()); // Load any persisted data
gpWizardState->lpSelectedISPInfo->LoadHistory((BSTR)A2W(cszCustomPayment)); return TRUE; } // User clicked next, so we need to collect and validate dat
case WM_USER_NEXT: { TCHAR szQuery[INTERNET_MAX_URL_LENGTH];
memset(szQuery, 0, sizeof(szQuery));
// Attach the walker to the curent page
// Use the Walker to get the query string
IWebBrowser2 *lpWebBrowser; gpWizardState->pICWWebView->get_BrowserObject(&lpWebBrowser); gpWizardState->pHTMLWalker->AttachToDocument(lpWebBrowser); gpWizardState->pHTMLWalker->get_FirstFormQueryString(szQuery); gpWizardState->pISPData->PutDataElement(ISPDATA_PAYMENT_CUSTOMDATA, szQuery, ISPDATA_Validate_None); // detach the walker
gpWizardState->pHTMLWalker->Detach(); SetPropSheetResult(hDlg,TRUE); return TRUE; } } // Default return value if message is not handled
return FALSE; }
/*******************************************************************
NAME: SwitchPaymentType
********************************************************************/
void SwitchPaymentType ( HWND hDlg, WORD wPaymentType ) { TCHAR szTemp[MAX_RES_LEN]; PAGEINFO *pPageInfo = (PAGEINFO *) GetWindowLongPtr(hDlg,DWLP_USER);
// nothing to do if the payment type has not changed
if (wPaymentType == wCurrentPaymentType) return; // set the current payment type
wCurrentPaymentType = wPaymentType; // If the custom payment DLG is currently active, then we
// need to persist any data the user may have entered.
if (g_bCustomPaymentActive && IsWindowVisible(hDlgCurrentPaymentType)) { gpWizardState->lpSelectedISPInfo->SaveHistory((BSTR)A2W(cszCustomPayment)); }
// Hide the current payment type window if there is one
if (hDlgCurrentPaymentType) { ShowWindow(hDlgCurrentPaymentType, SW_HIDE); } //assume false for the weboc event handling
g_bCustomPaymentActive = FALSE; gpWizardState->pISPData->PutDataElement(ISPDATA_PAYMENT_CUSTOMDATA, NULL, ISPDATA_Validate_None);
// Create a new payment type DLG if necessary
switch (wPaymentType) { case PAYMENT_TYPE_CREDITCARD: { if (NULL == hDlgCreditCard) { hDlgCreditCard = CreateDialog(ghInstanceResDll, MAKEINTRESOURCE(IDD_PAYMENTTYPE_CREDITCARD), hDlg, CreditCardPaymentDlgProc); // Also load the accelerator
hAccelCreditCard = LoadAccelerators(ghInstanceResDll, MAKEINTRESOURCE(IDA_PAYMENTTYPE_CREDITCARD)); } hDlgCurrentPaymentType = hDlgCreditCard; // Set the acclerator table to the nested dialog
pPageInfo->hAccelNested = hAccelCreditCard; LoadString(ghInstanceResDll, IDS_PAYMENT_CREDITCARD, szTemp, ARRAYSIZE(szTemp)); break; } case PAYMENT_TYPE_INVOICE: { if (NULL == hDlgInvoice) { hDlgInvoice = CreateDialog(ghInstanceResDll, MAKEINTRESOURCE(IDD_PAYMENTTYPE_INVOICE), hDlg, InvoicePaymentDlgProc); // Also load the accelerator
hAccelInvoice = LoadAccelerators(ghInstanceResDll, MAKEINTRESOURCE(IDA_PAYMENTTYPE_INVOICE)); } hDlgCurrentPaymentType = hDlgInvoice; // Set the acclerator table to the nested dialog
pPageInfo->hAccelNested = hAccelInvoice; LoadString(ghInstanceResDll, IDS_PAYMENT_INVOICE, szTemp, ARRAYSIZE(szTemp)); break; }
case PAYMENT_TYPE_PHONEBILL: { if (NULL == hDlgPhoneBill) { hDlgPhoneBill = CreateDialog(ghInstanceResDll, MAKEINTRESOURCE(IDD_PAYMENTTYPE_PHONEBILL), hDlg, PhoneBillPaymentDlgProc); // Also load the accelerator
hAccelPhoneBill = LoadAccelerators(ghInstanceResDll, MAKEINTRESOURCE(IDA_PAYMENTTYPE_PHONEBILL)); } hDlgCurrentPaymentType = hDlgPhoneBill; // Set the acclerator table to the nested dialog
pPageInfo->hAccelNested = hAccelPhoneBill; LoadString(ghInstanceResDll, IDS_PAYMENT_PHONE, szTemp, ARRAYSIZE(szTemp)); break; }
case PAYMENT_TYPE_CUSTOM: { g_bCustomPaymentActive = TRUE;
if (NULL == hDlgCustom) { hDlgCustom = CreateDialog(ghInstanceResDll, MAKEINTRESOURCE(IDD_PAYMENTTYPE_CUSTOM), hDlg, CustomPaymentDlgProc); } hDlgCurrentPaymentType = hDlgCustom; // Set the acclerator table to the nested dialog. There is not one
// in this case
pPageInfo->hAccelNested = NULL; // We must force the custom payment type dialog to connect and browse
CPAYCSV far *pcPAYCSV; HWND hWndPayment = GetDlgItem(hDlg, IDC_PAYMENTTYPE); // Get the currently selected item's PAYCSV obhect
pcPAYCSV = (CPAYCSV *)ComboBox_GetItemData(hWndPayment, ComboBox_GetCurSel( hWndPayment )); ASSERT(pcPAYCSV); SendMessage(hDlgCustom, WM_USER_CUSTOMINIT, 0, (LPARAM)pcPAYCSV); LoadString(ghInstanceResDll, IDS_PAYMENT_CUSTOM, szTemp, ARRAYSIZE(szTemp)); break; } } // Set the combo box string
SetDlgItemText(hDlg, IDC_PAYMENT_GROUP, szTemp); // Show the new payment type window
ShowWindowWithParentControl(hDlgCurrentPaymentType); }
/*******************************************************************
NAME: PaymentInitProc
SYNOPSIS: Called when page is displayed
ENTRY: hDlg - dialog window fFirstInit - TRUE if this is the first time the dialog is initialized, FALSE if this InitProc has been called before (e.g. went past this page and backed up)
********************************************************************/ BOOL CALLBACK PaymentInitProc ( HWND hDlg, BOOL fFirstInit, UINT *puNextPage ) { BOOL bRet = TRUE; BOOL bLUHN = FALSE; HWND hWndPayment = GetDlgItem(hDlg, IDC_PAYMENTTYPE); CPAYCSV far *pcPAYCSV; // if we've travelled through external apprentice pages,
// it's easy for our current page pointer to get munged,
// so reset it here for sanity's sake.
gpWizardState->uCurrentPage = ORD_PAGE_PAYMENT; ASSERT(gpWizardState->lpSelectedISPInfo); // invalidate the current payment type, so that we refresh everthing
// in the event that we are reloading this page
wCurrentPaymentType = PAYMENT_TYPE_INVALID; if (fFirstInit || !(gpWizardState->pStorage->Compare(ICW_PAYMENT, gpWizardState->lpSelectedISPInfo->get_szPayCSVPath(), MAX_PATH))) { CCSVFile far *pcCSVFile; HRESULT hr; int iIndex;
// Read the payment .CSV file.
pcCSVFile = new CCSVFile; if (!pcCSVFile) { MsgBox(hDlg, IDS_ERR_OUTOFMEMORY, MB_ICONEXCLAMATION,MB_OK); return (FALSE); } gpWizardState->pStorage->Set(ICW_PAYMENT, gpWizardState->lpSelectedISPInfo->get_szPayCSVPath(), MAX_PATH);
if (!pcCSVFile->Open(gpWizardState->lpSelectedISPInfo->get_szPayCSVPath())) { AssertMsg(0, "Cannot open payment .CSV file"); delete pcCSVFile; pcCSVFile = NULL; return (FALSE); }
// Read the first line, since it contains field headers
pcPAYCSV = new CPAYCSV; if (!pcPAYCSV) { // BUGBUG Show error message
return (FALSE); } // Reading the first line also determines whether the csv file is contains
// the LUHN format. If it does, we need to keep a record of bLUHN so that the
// subsequent line can be read correctly.
if (ERROR_SUCCESS != (hr = pcPAYCSV->ReadFirstLine(pcCSVFile, &bLUHN))) { // Handle the error case
delete pcCSVFile; pcCSVFile = NULL; return (FALSE); } delete pcPAYCSV; // Don't need this one any more
ComboBox_ResetContent(hWndPayment);
// Read the Payment CSV file
do { // Allocate a new Payment record
pcPAYCSV = new CPAYCSV; if (!pcPAYCSV) { // BUGBUG Show error message
bRet = FALSE; break; } // Read a line from the ISPINFO file
hr = pcPAYCSV->ReadOneLine(pcCSVFile, bLUHN); if (hr == ERROR_NO_MORE_ITEMS) { delete pcPAYCSV; // We don't need this one
break; } else if (hr == ERROR_FILE_NOT_FOUND) { // BUGBUG Show error message
delete pcPAYCSV; pcPAYCSV = NULL; } else if (hr != ERROR_SUCCESS) { // BUGBUG Show error message
delete pcPAYCSV; bRet = FALSE; break; } // Add the entry to the comboBox
if (pcPAYCSV) { iIndex = ComboBox_AddString(hWndPayment, pcPAYCSV->get_szDisplayName()); ComboBox_SetItemData(hWndPayment, iIndex, pcPAYCSV); } } while (TRUE);
// Select the first payment type in the list
ComboBox_SetCurSel(hWndPayment, 0);
pcPAYCSV = (CPAYCSV *)ComboBox_GetItemData(hWndPayment, 0); ASSERT(pcPAYCSV); SwitchPaymentType(hDlg, pcPAYCSV->get_wPaymentType());
pcCSVFile->Close(); delete pcCSVFile; pcCSVFile = NULL; } else { // Get the currently selected item
int iIndex = ComboBox_GetCurSel( hWndPayment ); // Get the payment type, and update the payment area
pcPAYCSV = (CPAYCSV *)ComboBox_GetItemData(hWndPayment, iIndex); ASSERT(pcPAYCSV);
SwitchPaymentType(hDlg, pcPAYCSV->get_wPaymentType()); // Setup the ISPData object so that is can apply proper validation based on the selected ISP
// this is necessary here, because the user info page might have been skiped
gpWizardState->pISPData->PutValidationFlags(gpWizardState->lpSelectedISPInfo->get_dwRequiredUserInputFlags()); }
if (!fFirstInit) { TCHAR szTemp[MAX_RES_LEN]; if (LoadString(ghInstanceResDll, ((gpWizardState->lpSelectedISPInfo->get_dwCFGFlag() & ICW_CFGFLAG_SECURE) ? IDS_PAYMENT_SECURE : IDS_PAYMENT_UNSECURE), szTemp, MAX_RES_LEN)) { SetWindowText (GetDlgItem(hDlg,IDC_PAYMENT_SECURE), szTemp); } } return bRet; }
/*******************************************************************
NAME: PaymentOKProc
SYNOPSIS: Called when Next or Back btns pressed from page
ENTRY: hDlg - dialog window fForward - TRUE if 'Next' was pressed, FALSE if 'Back' puNextPage - if 'Next' was pressed, proc can fill this in with next page to go to. This parameter is ingored if 'Back' was pressed. pfKeepHistory - page will not be kept in history if proc fills this in with FALSE.
EXIT: returns TRUE to allow page to be turned, FALSE to keep the same page.
********************************************************************/ BOOL CALLBACK PaymentOKProc ( HWND hDlg, BOOL fForward, UINT *puNextPage, BOOL *pfKeepHistory ) { // If the custom payment DLG has been shown, then we
// need to persist any data the user may have entered.
// We have shown the custom payment DLG, it hDlgCustom is not NULL
if (NULL != hDlgCustom && IsWindowVisible(hDlgCustom)) { gpWizardState->lpSelectedISPInfo->SaveHistory((BSTR)A2W(cszCustomPayment)); } // NOTE that we are leaving the payment page, so the custom payment
// WEBOC is no longer active
g_bCustomPaymentActive = FALSE; if (fForward) { TCHAR szTemp[MAX_RES_LEN]; HWND hWndPayment = GetDlgItem(hDlg, IDC_PAYMENTTYPE); CPAYCSV far *pcPAYCSV; int iIndex; // Create a local reference for the ISPData object
IICWISPData *pISPData = gpWizardState->pISPData; // Get the payment type
iIndex = ComboBox_GetCurSel(hWndPayment); pcPAYCSV = (CPAYCSV *)ComboBox_GetItemData(hWndPayment, iIndex); wsprintf (szTemp, TEXT("%d"), pcPAYCSV->get_wPaymentType()); pISPData->PutDataElement(ISPDATA_PAYMENT_TYPE, szTemp, ISPDATA_Validate_None); // Set the display name
pISPData->PutDataElement(ISPDATA_PAYMENT_DISPLAYNAME, pcPAYCSV->get_szDisplayName(), ISPDATA_Validate_None); switch(pcPAYCSV->get_wPaymentType()) { case PAYMENT_TYPE_CREDITCARD: if (!SendMessage(hDlgCreditCard, WM_USER_NEXT, 0, (LPARAM)pcPAYCSV)) return FALSE; break; case PAYMENT_TYPE_INVOICE: if (!SendMessage(hDlgInvoice, WM_USER_NEXT, 0, (LPARAM)pcPAYCSV)) return FALSE; break;
case PAYMENT_TYPE_PHONEBILL: if (!SendMessage(hDlgPhoneBill, WM_USER_NEXT, 0, (LPARAM)pcPAYCSV)) return FALSE; break;
case PAYMENT_TYPE_CUSTOM: if (!SendMessage(hDlgCustom, WM_USER_NEXT, 0, (LPARAM)pcPAYCSV)) return FALSE; break; } } return TRUE; }
/*******************************************************************
NAME: PaymentCmdProc
********************************************************************/ BOOL CALLBACK PaymentCmdProc ( HWND hDlg, WPARAM wParam, LPARAM lParam ) { WORD wNotifyCode = HIWORD (wParam); switch(LOWORD(wParam)) { case IDC_PAYMENTTYPE: { if (wNotifyCode == CBN_SELENDOK || wNotifyCode == CBN_CLOSEUP) { // Get the currently selected item
CPAYCSV far *pcPAYCSV; HWND hWndPayment = GetDlgItem(hDlg, IDC_PAYMENTTYPE); int iIndex = ComboBox_GetCurSel( hWndPayment );
// Get the payment type, and update the payment are
pcPAYCSV = (CPAYCSV *)ComboBox_GetItemData(hWndPayment, iIndex); ASSERT(pcPAYCSV); SwitchPaymentType(hDlg, pcPAYCSV->get_wPaymentType()); } break; } default: break; } return 1; }
|