/*++ Copyright (c) 1999 Microsoft Corporation Module Name: ListCtrl.cpp Abstract: Functions for "Welcome" and "Finish" pages of the wizard. Author: Sergey Kuzin (a-skuzin@microsoft.com) 09-August-1999 Environment: Revision History: --*/ #include "tsverui.h" #include "resource.h" void OnFinish(HWND hwndDlg, LPSHAREDWIZDATA pdata); void ShowErrorBox(HWND hwndDlg, DWORD dwError); /*++ Routine Description : dialog box procedure for the "Welcome" page. Arguments : IN HWND hwndDlg - handle to dialog box. IN UINT uMsg - message to be acted upon. IN WPARAM wParam - value specific to wMsg. IN LPARAM lParam - value specific to wMsg. Return Value : TRUE if it processed the message FALSE if it did not. --*/ INT_PTR CALLBACK StartPageProc ( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { //Process messages from the Welcome page //Retrieve the shared user data from GWL_USERDATA LPSHAREDWIZDATA pdata = (LPSHAREDWIZDATA) GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG : { //Get the shared data from PROPSHEETPAGE lParam value //and load it into GWL_USERDATA pdata = (LPSHAREDWIZDATA) ((LPPROPSHEETPAGE) lParam) -> lParam; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR) pdata); //It's an intro/end page, so get the title font //from the shared data and use it for the title control HWND hwndControl = GetDlgItem(hwndDlg, IDC_TITLE); SetWindowFont(hwndControl,pdata->hTitleFont, TRUE); break; } case WM_NOTIFY : { LPNMHDR lpnm = (LPNMHDR) lParam; switch (lpnm->code) { case PSN_SETACTIVE : //Enable the Next button PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT); break; case PSN_WIZNEXT : //Handle a Next button click here if(IsDlgButtonChecked(hwndDlg,IDC_NOWELLCOME)==BST_CHECKED){ pdata->bNoWellcome=TRUE; } break; case PSN_RESET : //Handle a Cancel button click, if necessary break; default : break; } } break; default: break; } return 0; } /*++ Routine Description : dialog box procedure for the "Finish" page. Arguments : IN HWND hwndDlg - handle to dialog box. IN UINT uMsg - message to be acted upon. IN WPARAM wParam - value specific to wMsg. IN LPARAM lParam - value specific to wMsg. Return Value : TRUE if it processed the message FALSE if it did not. --*/ INT_PTR CALLBACK FinishPageProc ( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { //Process messages from the Completion page //Retrieve the shared user data from GWL_USERDATA LPSHAREDWIZDATA pdata = (LPSHAREDWIZDATA) GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG : { //Get the shared data from PROPSHEETPAGE lParam value //and load it into GWL_USERDATA pdata = (LPSHAREDWIZDATA) ((LPPROPSHEETPAGE) lParam) -> lParam; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR) pdata); //It's an intro/end page, so get the title font //from userdata and use it on the title control HWND hwndControl = GetDlgItem(hwndDlg, IDC_TITLE); SetWindowFont(hwndControl,pdata->hTitleFont, TRUE); break; } case WM_NOTIFY : { LPNMHDR lpnm = (LPNMHDR) lParam; switch (lpnm->code) { case PSN_SETACTIVE : //Enable the correct buttons on for the active page PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_FINISH); break; case PSN_WIZBACK : //If the checkbox was checked, jump back //to the first interior page, not the second if(!pdata->bCheckingEnabled) { SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_VERSION_CHECKING); return TRUE; } break; case PSN_WIZFINISH : //Handle a Finish button click, if necessary OnFinish(hwndDlg,pdata); break; case PSN_RESET : //Handle a Cancel button click, if necessary break; default : break; } } break; default: break; } return 0; } /*++ Routine Description : writes all data into the registry. Arguments : IN HWND hwndDlg - handle to dialog box. IN LPSHAREDWIZDATA pdata - pointer to the data struct. Return Value : none --*/ void OnFinish( HWND hwndDlg, LPSHAREDWIZDATA pdata) { LONG lResult; // if(pdata->bNoWellcome){ lResult=SetRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[NOWELLCOME], 1); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } // if (pdata->bCheckingEnabled){ lResult=SetRegKey(HKEY_LOCAL_MACHINE, szKeyPath, KeyName[ASYNCHRONOUS], 0); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } lResult=SetRegKey(HKEY_LOCAL_MACHINE, szKeyPath, KeyName[IMPERSONATE], 0); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } lResult=SetRegKeyString(HKEY_LOCAL_MACHINE, TEXT("tsver.dll"),szKeyPath, KeyName[DLLNAME]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } lResult=SetRegKeyString(HKEY_LOCAL_MACHINE, TEXT("TsVerEventStartup"), szKeyPath, KeyName[STARTUP]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } else { // delete all the keys for (int i = 0; i < 4; i++){ lResult=DeleteRegKey(HKEY_LOCAL_MACHINE, szKeyPath, KeyName[i]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } //do not save other members, they are not valid! return; } //write message if (pdata->bMessageEnabled) { lResult=SetRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[USE_MSG], 1); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } else { lResult=DeleteRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[USE_MSG]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } // write constraints string if (pdata->pszConstraints&&_tcslen(pdata->pszConstraints)){ lResult=SetRegKeyString(HKEY_USERS, pdata->pszConstraints, szConstraintsKeyPath, KeyName[CONSTRAINTS]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } else { lResult=DeleteRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[CONSTRAINTS]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } // write title string if (pdata->pszMessageTitle&&_tcslen(pdata->pszMessageTitle)){ lResult=SetRegKeyString(HKEY_USERS, pdata->pszMessageTitle, szConstraintsKeyPath, KeyName[MSG_TITLE]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } else { lResult=DeleteRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[MSG_TITLE]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } // write message string if (pdata->pszMessageText&&_tcslen(pdata->pszMessageText)){ lResult=SetRegKeyString(HKEY_USERS, pdata->pszMessageText, szConstraintsKeyPath, KeyName[MSG]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } else { lResult=DeleteRegKey(HKEY_USERS, szConstraintsKeyPath, KeyName[MSG]); if(lResult!=ERROR_SUCCESS){ ShowErrorBox(hwndDlg,lResult); return; } } } /*++ Routine Description : shows MessageBox with error message. Arguments : IN HWND hwndDlg - handle to dialog box. IN DWORD dwError - error code. Return Value : none --*/ void ShowErrorBox( HWND hwndDlg, DWORD dwError) { LPTSTR MsgBuf=NULL; DWORD dwFlags=FORMAT_MESSAGE_FROM_SYSTEM| FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_IGNORE_INSERTS; if(!FormatMessage( dwFlags, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR)&MsgBuf, 0, NULL )){ MsgBuf=(LPTSTR)LocalAlloc(LPTR,2*sizeof(TCHAR)); if(MsgBuf == NULL) { return; } MsgBuf[0]=' '; } TCHAR szTemplate[256]; LoadString(g_hInst,IDS_SAVE_ERROR,szTemplate,255); LPTSTR szErrorMsg=new TCHAR[_tcslen(MsgBuf)+_tcslen(szTemplate)+1]; if(szErrorMsg == NULL) { return; } wsprintf(szErrorMsg,szTemplate,MsgBuf); MessageBox(hwndDlg,szErrorMsg,NULL,MB_OK|MB_ICONERROR); delete szErrorMsg; LocalFree(MsgBuf); }