|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1998
//
// File: selclass.c
//
//--------------------------------------------------------------------------
#include "hdwwiz.h"
int CALLBACK ClassListCompare( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ) { TCHAR ClassDescription1[LINE_LEN]; TCHAR ClassDescription2[LINE_LEN];
//
// Check if the 1st item is GUID_DEVCLASS_UNKNOWN
//
if (IsEqualGUID((LPGUID)lParam1, &GUID_DEVCLASS_UNKNOWN)) { return -1; }
//
// Check if the 2nd item is GUID_DEVCLASS_UNKNOWN
//
if (IsEqualGUID((LPGUID)lParam2, &GUID_DEVCLASS_UNKNOWN)) { return 1; }
if (SetupDiGetClassDescription((LPGUID)lParam1, ClassDescription1, LINE_LEN, NULL ) && SetupDiGetClassDescription((LPGUID)lParam2, ClassDescription2, LINE_LEN, NULL )) { return (lstrcmpi(ClassDescription1, ClassDescription2)); }
return 0; }
void InitHDW_PickClassDlg( HWND hwndClassList, PHARDWAREWIZ HardwareWiz ) { int Index; LPGUID ClassGuid, lpClassGuidSelected; GUID ClassGuidSelected; int lvIndex; DWORD ClassGuidNum; LV_ITEM lviItem; TCHAR ClassDescription[LINE_LEN];
SendMessage(hwndClassList, WM_SETREDRAW, FALSE, 0L);
// Clear the Class List
ListView_DeleteAllItems(hwndClassList);
lviItem.mask = LVIF_TEXT | LVIF_PARAM; lviItem.iItem = -1; lviItem.iSubItem = 0;
ClassGuid = HardwareWiz->ClassGuidList; ClassGuidNum = HardwareWiz->ClassGuidNum;
// keep track of previosuly selected item
if (IsEqualGUID(&HardwareWiz->lvClassGuidSelected, &GUID_NULL)) { lpClassGuidSelected = NULL;
} else { ClassGuidSelected = HardwareWiz->lvClassGuidSelected; HardwareWiz->lvClassGuidSelected = GUID_NULL; lpClassGuidSelected = &ClassGuidSelected; }
while (ClassGuidNum--) { if (SetupDiGetClassDescription(ClassGuid, ClassDescription, LINE_LEN, NULL )) { if (IsEqualGUID(ClassGuid, &GUID_DEVCLASS_UNKNOWN)) {
//
// We need to special case the UNKNOWN class and to give it a
// special icon (blank) and special text (Show All Devices).
//
LoadString(hHdwWiz, IDS_SHOWALLDEVICES, ClassDescription, SIZECHARS(ClassDescription) ); lviItem.iImage = g_BlankIconIndex; lviItem.mask |= LVIF_IMAGE;
} else if (SetupDiGetClassImageIndex(&HardwareWiz->ClassImageList, ClassGuid, &lviItem.iImage )) { lviItem.mask |= LVIF_IMAGE;
} else { lviItem.mask &= ~LVIF_IMAGE;
}
lviItem.pszText = ClassDescription; lviItem.lParam = (LPARAM) ClassGuid; lvIndex = ListView_InsertItem(hwndClassList, &lviItem);
//
// check for previous selection
//
if (lpClassGuidSelected && IsEqualGUID(lpClassGuidSelected, ClassGuid)) { ListView_SetItemState(hwndClassList, lvIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED );
lpClassGuidSelected = NULL; } }
ClassGuid++; }
//
// Sort the list
//
ListView_SortItems(hwndClassList, (PFNLVCOMPARE)ClassListCompare, NULL);
//
// if previous selection wasn't found select first in list.
//
if (IsEqualGUID(&HardwareWiz->lvClassGuidSelected, &GUID_NULL)) {
lvIndex = 0; ListView_SetItemState(hwndClassList, lvIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED ); }
//
// previous selection was found, fetch its current index
//
else {
lvIndex = ListView_GetNextItem(hwndClassList, -1, LVNI_SELECTED ); }
//
// scroll the selected item into view.
//
ListView_EnsureVisible(hwndClassList, lvIndex, FALSE); ListView_SetColumnWidth(hwndClassList, 0, LVSCW_AUTOSIZE_USEHEADER);
SendMessage(hwndClassList, WM_SETREDRAW, TRUE, 0L); }
INT_PTR CALLBACK HdwPickClassDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam ) { DWORD Error; HWND hwndClassList = GetDlgItem(hDlg, IDC_HDW_PICKCLASS_CLASSLIST); HWND hwndParentDlg = GetParent(hDlg); PHARDWAREWIZ HardwareWiz = (PHARDWAREWIZ)GetWindowLongPtr(hDlg, DWLP_USER);
switch (wMsg) { case WM_INITDIALOG: { LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam; LV_COLUMN lvcCol;
HardwareWiz = (PHARDWAREWIZ)lppsp->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)HardwareWiz);
//
// Get the Class Icon Image Lists. We do this only the first
// time this dialog is initialized.
//
if (HardwareWiz->ClassImageList.cbSize) {
ListView_SetImageList(hwndClassList, HardwareWiz->ClassImageList.ImageList, LVSIL_SMALL ); }
// Insert a column for the class list
lvcCol.mask = LVCF_FMT | LVCF_WIDTH; lvcCol.fmt = LVCFMT_LEFT; lvcCol.iSubItem = 0; ListView_InsertColumn(hwndClassList, 0, (LV_COLUMN FAR *)&lvcCol);
//
// Save the class before the user chooses one. This will be restored
// in the event the install is cancelled.
//
HardwareWiz->SavedClassGuid = HardwareWiz->DeviceInfoData.ClassGuid;
break; }
case WM_DESTROY: break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) {
//
// This dialog is being activated. Each time we are activated
// we free up the current DeviceInfo and create a new one. Although
// inefficient, its necessary to reenumerate the class list.
//
case PSN_SETACTIVE:
PropSheet_SetWizButtons(hwndParentDlg, PSWIZB_BACK | PSWIZB_NEXT); HardwareWiz->PrevPage = IDD_ADDDEVICE_SELECTCLASS;
//
// If we have DeviceInfo from going forward delete it.
//
if (HardwareWiz->ClassGuidSelected) {
SetupDiDeleteDeviceInfo(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData); memset(&HardwareWiz->DeviceInfoData, 0, sizeof(SP_DEVINFO_DATA)); }
HardwareWiz->ClassGuidSelected = NULL;
HdwBuildClassInfoList(HardwareWiz, DIBCI_NOINSTALLCLASS, HardwareWiz->hMachine ? HardwareWiz->MachineName : NULL ); InitHDW_PickClassDlg(hwndClassList, HardwareWiz); break;
case PSN_RESET: break;
case PSN_WIZBACK: HardwareWiz->PrevPage = IDD_ADDDEVICE_SELECTCLASS;
if (HardwareWiz->EnterInto == IDD_ADDDEVICE_SELECTCLASS) { SetDlgMsgResult(hDlg, wMsg, HardwareWiz->EnterFrom);
} else { SetDlgMsgResult(hDlg, wMsg, IDD_ADDDEVICE_ASKDETECT); }
break;
case PSN_WIZNEXT: { HDEVINFO hDeviceInfo; LPGUID ClassGuidSelected; SP_DEVINSTALL_PARAMS DeviceInstallParams;
SetDlgMsgResult(hDlg, wMsg, IDD_ADDDEVICE_SELECTDEVICE);
if (IsEqualGUID(&HardwareWiz->lvClassGuidSelected, &GUID_NULL)) { HardwareWiz->ClassGuidSelected = NULL; break; }
ClassGuidSelected = &HardwareWiz->lvClassGuidSelected; HardwareWiz->ClassGuidSelected = ClassGuidSelected;
//
// Add a new element to the DeviceInfo from the GUID and class name
//
HardwareWiz->DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (!SetupDiGetClassDescription(HardwareWiz->ClassGuidSelected, HardwareWiz->ClassDescription, sizeof(HardwareWiz->ClassDescription)/sizeof(TCHAR), NULL ) || !SetupDiClassNameFromGuid(HardwareWiz->ClassGuidSelected, HardwareWiz->ClassName, sizeof(HardwareWiz->ClassName)/sizeof(TCHAR), NULL )) { // unhandled error!
HardwareWiz->ClassGuidSelected = NULL; break; }
if (IsEqualGUID(HardwareWiz->ClassGuidSelected, &GUID_DEVCLASS_UNKNOWN)) { ClassGuidSelected = (LPGUID)&GUID_NULL; }
if (!SetupDiCreateDeviceInfo(HardwareWiz->hDeviceInfo, HardwareWiz->ClassName, ClassGuidSelected, NULL, hwndParentDlg, DICD_GENERATE_ID, &HardwareWiz->DeviceInfoData ) || !SetupDiSetSelectedDevice(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData )) { HardwareWiz->ClassGuidSelected = NULL; break; } break; }
case NM_DBLCLK: PropSheet_PressButton(hwndParentDlg, PSBTN_NEXT); break;
case LVN_ITEMCHANGED: { LPNM_LISTVIEW lpnmlv = (LPNM_LISTVIEW)lParam;
if ((lpnmlv->uChanged & LVIF_STATE)) { if (lpnmlv->uNewState & LVIS_SELECTED) { HardwareWiz->lvClassGuidSelected = *((LPGUID)lpnmlv->lParam);
} else if (IsEqualGUID((LPGUID)lpnmlv->lParam, &HardwareWiz->lvClassGuidSelected)) { HardwareWiz->lvClassGuidSelected = GUID_NULL; } }
break; } } break;
case WM_SYSCOLORCHANGE: _OnSysColorChange(hDlg, wParam, lParam);
// Update the ImageList Background color
ImageList_SetBkColor((HIMAGELIST)SendMessage(GetDlgItem(hDlg, IDC_HDW_PICKCLASS_CLASSLIST), LVM_GETIMAGELIST, (WPARAM)(LVSIL_SMALL), 0L), GetSysColor(COLOR_WINDOW));
break;
default: return(FALSE); }
return(TRUE); }
void DestroyDynamicWizard( HWND hwndParentDlg, PHARDWAREWIZ HardwareWiz, BOOL WmDestroy ) { DWORD Pages; PSP_INSTALLWIZARD_DATA InstallWizard = &HardwareWiz->InstallDynaWiz; SP_DEVINSTALL_PARAMS DeviceInstallParams;
Pages = InstallWizard->NumDynamicPages; InstallWizard->NumDynamicPages = 0;
if (InstallWizard->DynamicPageFlags & DYNAWIZ_FLAG_PAGESADDED) {
if (!WmDestroy) { while (Pages--) { PropSheet_RemovePage(hwndParentDlg, (WPARAM)-1, InstallWizard->DynamicPages[Pages] );
InstallWizard->DynamicPages[Pages] = NULL; } }
DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS); if (SetupDiGetDeviceInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &DeviceInstallParams )) { DeviceInstallParams.Flags |= DI_CLASSINSTALLPARAMS; SetupDiSetDeviceInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &DeviceInstallParams ); }
InstallWizard->DynamicPageFlags &= ~DYNAWIZ_FLAG_PAGESADDED; InstallWizard->ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); InstallWizard->ClassInstallHeader.InstallFunction = DIF_DESTROYWIZARDDATA; InstallWizard->hwndWizardDlg = hwndParentDlg;
if (SetupDiSetClassInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &InstallWizard->ClassInstallHeader, sizeof(SP_INSTALLWIZARD_DATA) )) { SetupDiCallClassInstaller(DIF_DESTROYWIZARDDATA, HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData ); } }
if (!WmDestroy) { } }
//
// The real select device page is in either setupapi or the class installer
// for dyanwiz. this page is a blank page which never shows its face
// to have a consistent place to jump to when the class is known.
//
INT_PTR CALLBACK HdwSelectDeviceDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam ) { HWND hwndParentDlg = GetParent(hDlg); PHARDWAREWIZ HardwareWiz = (PHARDWAREWIZ)GetWindowLongPtr(hDlg, DWLP_USER);
switch (wMsg) { case WM_INITDIALOG: { LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam; HardwareWiz = (PHARDWAREWIZ)lppsp->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)HardwareWiz); break; }
case WM_DESTROY: break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) {
case PSN_SETACTIVE: { int PrevPage, BackUpPage;
PrevPage = HardwareWiz->PrevPage; HardwareWiz->PrevPage = IDD_ADDDEVICE_SELECTDEVICE; BackUpPage = HardwareWiz->EnterInto == IDD_ADDDEVICE_SELECTDEVICE ? HardwareWiz->EnterFrom : IDD_ADDDEVICE_SELECTCLASS;
//
// If we are coming from select class, driver update or Install NewDevice
// then we are going forward.
//
if (!HardwareWiz->ClassGuidSelected || PrevPage == IDD_WIZARDEXT_PRESELECT) {
//
// going backwards, cleanup and backup
//
SetupDiSetSelectedDriver(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, NULL );
SetupDiDestroyDriverInfoList(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, SPDIT_COMPATDRIVER );
SetupDiDestroyDriverInfoList(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, SPDIT_CLASSDRIVER );
//
// Cleanup the WizExtPreSelect Page
//
if (HardwareWiz->WizExtPreSelect.hPropSheet) { PropSheet_RemovePage(GetParent(hDlg), (WPARAM)-1, HardwareWiz->WizExtPreSelect.hPropSheet ); }
SetDlgMsgResult(hDlg, wMsg, BackUpPage); break; }
// Set the Cursor to an Hourglass
SetCursor(LoadCursor(NULL, IDC_WAIT));
HardwareWiz->WizExtPreSelect.hPropSheet = CreateWizExtPage(IDD_WIZARDEXT_PRESELECT, WizExtPreSelectDlgProc, HardwareWiz );
if (HardwareWiz->WizExtPreSelect.hPropSheet) { PropSheet_AddPage(hwndParentDlg, HardwareWiz->WizExtPreSelect.hPropSheet); SetDlgMsgResult(hDlg, wMsg, IDD_WIZARDEXT_PRESELECT); } else { SetDlgMsgResult(hDlg, wMsg, BackUpPage); }
break; }
} break;
default: return(FALSE); }
return(TRUE); }
INT_PTR CALLBACK WizExtPreSelectDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam ) { HWND hwndParentDlg = GetParent(hDlg); PHARDWAREWIZ HardwareWiz = (PHARDWAREWIZ)GetWindowLongPtr(hDlg, DWLP_USER); int PrevPageId;
switch (wMsg) { case WM_INITDIALOG: { LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam; HardwareWiz = (PHARDWAREWIZ)lppsp->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)HardwareWiz); break; }
case WM_DESTROY: break;
case WM_NOTIFY:
switch (((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE:
PrevPageId = HardwareWiz->PrevPage; HardwareWiz->PrevPage = IDD_WIZARDEXT_PRESELECT;
if (PrevPageId == IDD_ADDDEVICE_SELECTDEVICE) { PSP_NEWDEVICEWIZARD_DATA WizardExt;
//
// Moving forward on first page
//
//
// Set the Cursor to an Hourglass
//
SetCursor(LoadCursor(NULL, IDC_WAIT));
//
// Add ClassWizard Extension pages
//
AddClassWizExtPages(hwndParentDlg, HardwareWiz, &HardwareWiz->WizExtPreSelect.DeviceWizardData, DIF_NEWDEVICEWIZARD_PRESELECT );
//
// Add the end page, which is first of the select page set
//
HardwareWiz->WizExtSelect.hPropSheet = CreateWizExtPage(IDD_WIZARDEXT_SELECT, WizExtSelectDlgProc, HardwareWiz );
if (HardwareWiz->WizExtSelect.hPropSheet) { PropSheet_AddPage(hwndParentDlg, HardwareWiz->WizExtSelect.hPropSheet); }
PropSheet_PressButton(hwndParentDlg, PSBTN_NEXT);
} else {
//
// Moving backwards on first page
//
//
// Clean up proppages added.
//
if (HardwareWiz->WizExtSelect.hPropSheet) { PropSheet_RemovePage(hwndParentDlg, (WPARAM)-1, HardwareWiz->WizExtSelect.hPropSheet ); HardwareWiz->WizExtSelect.hPropSheet = NULL; }
RemoveClassWizExtPages(hwndParentDlg, &HardwareWiz->WizExtPreSelect.DeviceWizardData );
//
// Jump back
//
SetDlgMsgResult(hDlg, wMsg, IDD_ADDDEVICE_SELECTDEVICE); }
break;
case PSN_WIZNEXT: SetDlgMsgResult(hDlg, wMsg, 0); break; } break;
default: return(FALSE); }
return(TRUE); }
INT_PTR CALLBACK WizExtSelectDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam ) { HWND hwndParentDlg = GetParent(hDlg); PHARDWAREWIZ HardwareWiz = (PHARDWAREWIZ)GetWindowLongPtr(hDlg, DWLP_USER); int PrevPageId; PSP_INSTALLWIZARD_DATA InstallWizard;
switch (wMsg) { case WM_INITDIALOG: {
LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam; HardwareWiz = (PHARDWAREWIZ)lppsp->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)HardwareWiz); break; }
case WM_DESTROY: DestroyDynamicWizard(hwndParentDlg, HardwareWiz, TRUE); break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE:
PrevPageId = HardwareWiz->PrevPage; HardwareWiz->PrevPage = IDD_WIZARDEXT_SELECT;
if (PrevPageId == IDD_WIZARDEXT_PRESELECT) { SP_DEVINSTALL_PARAMS DeviceInstallParams;
//
// Moving forward on first page
//
//
// Prepare to call the class installer, for class install wizard pages.
// and Add in setup's SelectDevice wizard page.
//
InstallWizard = &HardwareWiz->InstallDynaWiz; memset(InstallWizard, 0, sizeof(SP_INSTALLWIZARD_DATA)); InstallWizard->ClassInstallHeader.InstallFunction = DIF_INSTALLWIZARD; InstallWizard->ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); InstallWizard->hwndWizardDlg = GetParent(hDlg);
if (!SetupDiSetClassInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &InstallWizard->ClassInstallHeader, sizeof(SP_INSTALLWIZARD_DATA) )) { SetDlgMsgResult(hDlg, wMsg, IDD_WIZARDEXT_PRESELECT); break; }
//
// Get current DeviceInstall parameters, and then set the fields
// we wanted changed from default
//
DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS); if (!SetupDiGetDeviceInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &DeviceInstallParams )) { SetDlgMsgResult(hDlg, wMsg, IDD_WIZARDEXT_PRESELECT); break; }
DeviceInstallParams.Flags |= DI_SHOWCLASS | DI_SHOWOEM | DI_CLASSINSTALLPARAMS;
if (IsEqualGUID(HardwareWiz->ClassGuidSelected, &GUID_DEVCLASS_UNKNOWN)) { DeviceInstallParams.FlagsEx &= ~DI_FLAGSEX_FILTERCLASSES;
} else { DeviceInstallParams.FlagsEx |= DI_FLAGSEX_FILTERCLASSES; }
DeviceInstallParams.hwndParent = hwndParentDlg;
if (!SetupDiSetDeviceInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &DeviceInstallParams )) { SetDlgMsgResult(hDlg, wMsg, IDD_WIZARDEXT_PRESELECT); break; }
//
// Call the class installer for installwizard
// If no class install wizard pages default to run the standard
// setup wizard select device page.
//
if (SetupDiCallClassInstaller(DIF_INSTALLWIZARD, HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData ) && SetupDiGetClassInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, &InstallWizard->ClassInstallHeader, sizeof(SP_INSTALLWIZARD_DATA), NULL ) && InstallWizard->NumDynamicPages) { DWORD Pages;
InstallWizard->DynamicPageFlags |= DYNAWIZ_FLAG_PAGESADDED; for (Pages = 0; Pages < InstallWizard->NumDynamicPages; ++Pages ) { PropSheet_AddPage(hwndParentDlg, InstallWizard->DynamicPages[Pages]); }
HardwareWiz->SelectDevicePage = SetupDiGetWizardPage(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, InstallWizard, SPWPT_SELECTDEVICE, SPWP_USE_DEVINFO_DATA );
PropSheet_AddPage(hwndParentDlg, HardwareWiz->SelectDevicePage);
//SetDlgMsgResult(hDlg, wMsg, IDD_DYNAWIZ_FIRSTPAGE);
} else {
InstallWizard->DynamicPageFlags = 0; HardwareWiz->SelectDevicePage = NULL;
if (!AddClassWizExtPages(hwndParentDlg, HardwareWiz, &HardwareWiz->WizExtSelect.DeviceWizardData, DIF_NEWDEVICEWIZARD_SELECT )) { HardwareWiz->SelectDevicePage = SetupDiGetWizardPage(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, InstallWizard, SPWPT_SELECTDEVICE, SPWP_USE_DEVINFO_DATA );
PropSheet_AddPage(hwndParentDlg, HardwareWiz->SelectDevicePage);
//SetDlgMsgResult(hDlg, wMsg, IDD_DYNAWIZ_SELECTDEV_PAGE);
} }
//
// Clear the class install parameters.
//
SetupDiSetClassInstallParams(HardwareWiz->hDeviceInfo, &HardwareWiz->DeviceInfoData, NULL, 0 );
//
// Add the end page, which is the preanalyze page.
//
HardwareWiz->WizExtPreAnalyze.hPropSheet = CreateWizExtPage(IDD_WIZARDEXT_PREANALYZE, WizExtPreAnalyzeDlgProc, HardwareWiz );
PropSheet_AddPage(hwndParentDlg, HardwareWiz->WizExtPreAnalyze.hPropSheet);
PropSheet_PressButton(hwndParentDlg, PSBTN_NEXT);
} else { //
// Moving backwards on first page
//
//
// Clean up proppages added.
//
DestroyDynamicWizard(hwndParentDlg, HardwareWiz, FALSE);
if (HardwareWiz->SelectDevicePage) { PropSheet_RemovePage(hwndParentDlg, (WPARAM)-1, HardwareWiz->SelectDevicePage ); HardwareWiz->SelectDevicePage = NULL; }
if (HardwareWiz->WizExtPreAnalyze.hPropSheet) { PropSheet_RemovePage(hwndParentDlg, (WPARAM)-1, HardwareWiz->WizExtPreAnalyze.hPropSheet ); HardwareWiz->WizExtPreAnalyze.hPropSheet = NULL; }
RemoveClassWizExtPages(hwndParentDlg, &HardwareWiz->WizExtSelect.DeviceWizardData );
//
// Jump back
//
SetDlgMsgResult(hDlg, wMsg, IDD_WIZARDEXT_PRESELECT); }
break;
case PSN_WIZNEXT: SetDlgMsgResult(hDlg, wMsg, 0); break;
} break;
default: return(FALSE); }
return(TRUE); }
|