|
|
/*++
Copyright (c) 1999 - 2000 Microsoft Corporation
Module Name:
userinfo.c
Abstract:
Functions for handling events in the "User Info" page of the fax configuration wizard
Environment:
Fax configuration wizard
Revision History:
03/13/00 -taoyuan- Created it.
mm/dd/yy -author- description
--*/
#include "faxcfgwz.h"
// functions which will be used only in this file
VOID DoInitUserInfo(HWND hDlg); BOOL DoSaveUserInfo(HWND hDlg); DWORD FillInCountryCombo(HWND hDlg);
VOID DoInitUserInfo( HWND hDlg )
/*++
Routine Description:
Initializes the User Info property sheet page with information from shared data
Arguments:
hDlg - Handle to the User Info property sheet page
Return Value:
NONE
--*/
#define InitUserInfoTextField(id, str) SetDlgItemText(hDlg, id, (str) ? str : TEXT(""));
{ LPTSTR pszAddressDetail = NULL; PFAX_PERSONAL_PROFILE pUserInfo = NULL;
DEBUG_FUNCTION_NAME(TEXT("DoInitUserInfo()"));
pUserInfo = &(g_wizData.userInfo);
//
// A numeric edit control should be LTR
//
SetLTREditDirection(hDlg, IDC_SENDER_FAX_NUMBER); SetLTREditDirection(hDlg, IDC_SENDER_MAILBOX); SetLTREditDirection(hDlg, IDC_SENDER_HOME_TL); SetLTREditDirection(hDlg, IDC_SENDER_OFFICE_TL);
//
// Fill in the edit text fields
//
InitUserInfoTextField(IDC_SENDER_NAME, pUserInfo->lptstrName); InitUserInfoTextField(IDC_SENDER_FAX_NUMBER, pUserInfo->lptstrFaxNumber); InitUserInfoTextField(IDC_SENDER_MAILBOX, pUserInfo->lptstrEmail); InitUserInfoTextField(IDC_SENDER_COMPANY, pUserInfo->lptstrCompany); InitUserInfoTextField(IDC_SENDER_TITLE, pUserInfo->lptstrTitle); InitUserInfoTextField(IDC_SENDER_DEPT, pUserInfo->lptstrDepartment); InitUserInfoTextField(IDC_SENDER_OFFICE_LOC, pUserInfo->lptstrOfficeLocation); InitUserInfoTextField(IDC_SENDER_HOME_TL, pUserInfo->lptstrHomePhone); InitUserInfoTextField(IDC_SENDER_OFFICE_TL, pUserInfo->lptstrOfficePhone); InitUserInfoTextField(IDC_SENDER_BILLING_CODE, pUserInfo->lptstrBillingCode); InitUserInfoTextField(IDC_ADDRESS_DETAIL, pUserInfo->lptstrStreetAddress);
return; }
BOOL DoSaveUserInfo( HWND hDlg )
/*++
Routine Description:
Save the information on the User Info property sheet page to shared data
Arguments:
hDlg - Handle to the User Info property sheet page
Return Value:
TRUE -- if no error FALSE -- if error
--*/
#define SaveUserInfoTextField(id, str) \
{ \ if (! GetDlgItemText(hDlg, id, szBuffer, MAX_PATH)) \ { \ szBuffer[0] = 0; \ } \ MemFree(str); \ str = StringDup(szBuffer); \ if(!str) \ { \ DebugPrintEx(DEBUG_ERR, TEXT("StringDup failed.") ); \ return FALSE; \ } \ } \
{ TCHAR szBuffer[MAX_PATH]; PFAX_PERSONAL_PROFILE pUserInfo = NULL;
DEBUG_FUNCTION_NAME(TEXT("DoSaveUserInfo()"));
pUserInfo = &(g_wizData.userInfo);
//
// Save the edit text fields
//
SaveUserInfoTextField(IDC_SENDER_NAME, pUserInfo->lptstrName); SaveUserInfoTextField(IDC_SENDER_FAX_NUMBER, pUserInfo->lptstrFaxNumber); SaveUserInfoTextField(IDC_SENDER_MAILBOX, pUserInfo->lptstrEmail); SaveUserInfoTextField(IDC_SENDER_COMPANY, pUserInfo->lptstrCompany); SaveUserInfoTextField(IDC_SENDER_TITLE, pUserInfo->lptstrTitle); SaveUserInfoTextField(IDC_SENDER_DEPT, pUserInfo->lptstrDepartment); SaveUserInfoTextField(IDC_SENDER_OFFICE_LOC, pUserInfo->lptstrOfficeLocation); SaveUserInfoTextField(IDC_SENDER_HOME_TL, pUserInfo->lptstrHomePhone); SaveUserInfoTextField(IDC_SENDER_OFFICE_TL, pUserInfo->lptstrOfficePhone); SaveUserInfoTextField(IDC_SENDER_BILLING_CODE, pUserInfo->lptstrBillingCode); SaveUserInfoTextField(IDC_ADDRESS_DETAIL, pUserInfo->lptstrStreetAddress);
return TRUE; }
BOOL LoadUserInfo() /*++
Routine Description:
Load the user information from the system.
Arguments:
pUserInfo - Points to the user mode memory structure
Return Value:
TRUE if successful, FALSE if there is an error
--*/
#define DuplicateString(dst, src) \
{ \ dst = StringDup(src); \ if(!dst) \ { \ bRes = FALSE; \ DebugPrintEx(DEBUG_ERR, TEXT("StringDup failed.") ); \ goto exit; \ } \ } { BOOL bRes = TRUE; HRESULT hr; FAX_PERSONAL_PROFILE fpp = {0}; PFAX_PERSONAL_PROFILE pUserInfo = NULL;
DEBUG_FUNCTION_NAME(TEXT("LoadUserInfo()"));
pUserInfo = &(g_wizData.userInfo);
fpp.dwSizeOfStruct = sizeof(fpp); hr = FaxGetSenderInformation(&fpp); if (FAILED(hr)) { DebugPrintEx(DEBUG_ERR, TEXT("FaxGetSenderInformation error, ec = %d"), hr); return FALSE; } //
// Copy the user information to shared data
//
pUserInfo->dwSizeOfStruct = sizeof(FAX_PERSONAL_PROFILE);
DuplicateString(pUserInfo->lptstrName, fpp.lptstrName); DuplicateString(pUserInfo->lptstrFaxNumber, fpp.lptstrFaxNumber); DuplicateString(pUserInfo->lptstrEmail, fpp.lptstrEmail); DuplicateString(pUserInfo->lptstrCompany, fpp.lptstrCompany); DuplicateString(pUserInfo->lptstrTitle, fpp.lptstrTitle); DuplicateString(pUserInfo->lptstrStreetAddress, fpp.lptstrStreetAddress); DuplicateString(pUserInfo->lptstrCity, fpp.lptstrCity); DuplicateString(pUserInfo->lptstrState, fpp.lptstrState); DuplicateString(pUserInfo->lptstrZip, fpp.lptstrZip); DuplicateString(pUserInfo->lptstrCountry, fpp.lptstrCountry); DuplicateString(pUserInfo->lptstrDepartment, fpp.lptstrDepartment); DuplicateString(pUserInfo->lptstrOfficeLocation, fpp.lptstrOfficeLocation); DuplicateString(pUserInfo->lptstrHomePhone, fpp.lptstrHomePhone); DuplicateString(pUserInfo->lptstrOfficePhone, fpp.lptstrOfficePhone); DuplicateString(pUserInfo->lptstrBillingCode, fpp.lptstrBillingCode);
exit: hr = FaxFreeSenderInformation(&fpp); if (FAILED(hr)) { //
// Memory leak.
//
DebugPrintEx(DEBUG_ERR, TEXT("FaxFreeSenderInformation error, ec = %d"), hr); }
return bRes; }
BOOL SaveUserInfo() /*++
Routine Description:
Save the user information to the system.
Arguments:
pUserInfo - Points to the user mode memory structure
Return Value:
TRUE if successful, FALSE if there is an error
--*/
{ HRESULT hResult;
DEBUG_FUNCTION_NAME(TEXT("SaveUserInfo()"));
g_wizData.userInfo.dwSizeOfStruct = sizeof(FAX_PERSONAL_PROFILE); hResult = FaxSetSenderInformation(&(g_wizData.userInfo));
return (hResult == S_OK); }
VOID FreeUserInfo() /*++
Routine Description:
Free the user info data and release the memory.
Arguments:
pUserInfo - Pointer to the user info data structure
Return Value:
none
--*/
{ FAX_PERSONAL_PROFILE fpp = {0}; DEBUG_FUNCTION_NAME(TEXT("FreeUserInfo"));
MemFree(g_wizData.userInfo.lptstrName); MemFree(g_wizData.userInfo.lptstrFaxNumber); MemFree(g_wizData.userInfo.lptstrCompany); MemFree(g_wizData.userInfo.lptstrStreetAddress); MemFree(g_wizData.userInfo.lptstrCity); MemFree(g_wizData.userInfo.lptstrState); MemFree(g_wizData.userInfo.lptstrZip); MemFree(g_wizData.userInfo.lptstrCountry); MemFree(g_wizData.userInfo.lptstrTitle); MemFree(g_wizData.userInfo.lptstrDepartment); MemFree(g_wizData.userInfo.lptstrOfficeLocation); MemFree(g_wizData.userInfo.lptstrHomePhone); MemFree(g_wizData.userInfo.lptstrOfficePhone); MemFree(g_wizData.userInfo.lptstrEmail); MemFree(g_wizData.userInfo.lptstrBillingCode); MemFree(g_wizData.userInfo.lptstrTSID); //
// NULLify all pointer
//
g_wizData.userInfo = fpp;
return; }
INT_PTR CALLBACK UserInfoDlgProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) /*++
Routine Description:
Procedure for handling the "User Info" tab
Arguments:
hDlg - Identifies the property sheet page uMsg - Specifies the message wParam - Specifies additional message-specific information lParam - Specifies additional message-specific information
Return Value:
Depends on the value of message parameter
--*/
{ switch (uMsg) { case WM_INITDIALOG : { //
// Maximum length for various text fields in the dialog
//
static INT textLimits[] = {
IDC_SENDER_NAME, MAX_USERINFO_FULLNAME, IDC_SENDER_FAX_NUMBER, MAX_USERINFO_FAX_NUMBER, IDC_SENDER_MAILBOX, MAX_USERINFO_MAILBOX, IDC_SENDER_COMPANY, MAX_USERINFO_COMPANY, IDC_SENDER_TITLE, MAX_USERINFO_TITLE, IDC_SENDER_DEPT, MAX_USERINFO_DEPT, IDC_SENDER_OFFICE_LOC, MAX_USERINFO_OFFICE, IDC_SENDER_OFFICE_TL, MAX_USERINFO_WORK_PHONE, IDC_SENDER_HOME_TL, MAX_USERINFO_HOME_PHONE, IDC_SENDER_BILLING_CODE, MAX_USERINFO_BILLING_CODE, 0, };
LimitTextFields(hDlg, textLimits); //
// Initialize the text fields with information from the registry
//
DoInitUserInfo(hDlg);
return TRUE; }
case WM_COMMAND:
break;
case WM_NOTIFY : { LPNMHDR lpnm = (LPNMHDR) lParam;
switch (lpnm->code) { case PSN_SETACTIVE : // Enable the Next button
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT | PSWIZB_BACK); break;
case PSN_WIZBACK: { //
// Handle a Back button click here
//
if(RemoveLastPage(hDlg)) { return TRUE; } break; } case PSN_WIZNEXT :
//
// Handle a Next button click here
//
DoSaveUserInfo(hDlg); SetLastPage(IDD_WIZARD_USER_INFO);
break;
case PSN_RESET : { // Handle a Cancel button click, if necessary
break; }
default : break; } } break; default: break; }
return FALSE; }
|