windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/net/lanwiz.c
2020-09-26 16:20:57 +08:00

1201 lines
30 KiB
C

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// lanwiz.c
//
// Description:
// This file contains the dialog procedure for the custom networking
// page (IDD_LANWIZ_DLG).
//
// This is the primary page for custom networking, all other networking
// pages come initially from this page.
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
static UINT iCurrentSelection;
static TCHAR *StrNetworkCardNumber;
//----------------------------------------------------------------------------
//
// Function: UpdateListView
//
// Purpose: clears all the entries in the list view and adds the items
// in the Network Component List that have the installed flag on
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
UpdateListView( IN HWND hwnd ) {
NETWORK_COMPONENT *pNetComponent;
SendDlgItemMessage( hwnd,
IDC_LVW_COMPLIST,
LVM_DELETEALLITEMS,
(WPARAM) 0,
(LPARAM) 0 );
for( pNetComponent = NetSettings.NetComponentsList;
pNetComponent;
pNetComponent = pNetComponent->next )
{
if( pNetComponent->bInstalled == TRUE )
{
//
// Make sure we are installing workstation and server components
// correctly. If this isn't one that should be added, continue
// on to the next one.
//
if( WizGlobals.iPlatform == PLATFORM_PERSONAL )
{
if( ! (pNetComponent->dwPlatforms & PERSONAL_INSTALL) )
{
continue;
}
}
else if( WizGlobals.iPlatform == PLATFORM_WORKSTATION )
{
if( ! (pNetComponent->dwPlatforms & WORKSTATION_INSTALL) )
{
continue;
}
}
else if( WizGlobals.iPlatform == PLATFORM_SERVER || WizGlobals.iPlatform == PLATFORM_ENTERPRISE || WizGlobals.iPlatform == PLATFORM_WEBBLADE)
{
if( ! (pNetComponent->dwPlatforms & SERVER_INSTALL) )
{
continue;
}
}
else
{
AssertMsg( FALSE,
"Invalid platform type." );
}
//
// If it is not a sysprep then just go ahead and add it to the
// list view. If we are doing a sysprep, check to see if this
// component is supported by sysprep to see if we should add it
// or not
//
if( WizGlobals.iProductInstall == PRODUCT_SYSPREP )
{
if( pNetComponent->bSysprepSupport )
{
InsertEntryIntoListView( GetDlgItem( hwnd, IDC_LVW_COMPLIST ),
(LPARAM) pNetComponent );
}
else
{
//
// If it is not supported by sysprep, then don't install it
//
pNetComponent->bInstalled = FALSE;
}
}
else
{
InsertEntryIntoListView( GetDlgItem( hwnd, IDC_LVW_COMPLIST ),
(LPARAM) pNetComponent );
}
}
}
}
//----------------------------------------------------------------------------
//
// Function: GetListViewIndex
//
// Purpose: returns the entry in the list view with the controlID specified by
// the index
//
// Arguments: IN HWND hwnd - handle to the dialog the list view is in
// IN WORD controlID - resource ID of the list view
// IN INT index - index in the list view of the item to grab
//
// Returns: a pointer to the item in the list view at the location specified by
// the IN parameter index
//
//----------------------------------------------------------------------------
NETWORK_COMPONENT*
GetListViewIndex( IN HWND hwnd,
IN WORD controlID,
IN INT index ) {
LVITEM lvI;
memset( &lvI, 0, sizeof(LVITEM) );
lvI.iItem = index;
lvI.mask = LVIF_PARAM;
SendDlgItemMessage( hwnd,
controlID,
LVM_GETITEM,
(WPARAM) 0,
(LPARAM) &lvI );
return (NETWORK_COMPONENT *)lvI.lParam ;
}
//----------------------------------------------------------------------------
//
// Function: SetListViewSelection
//
// Purpose: sets the selection in the list view (specified by controlID) to
// the position specified
//
// Arguments: IN HWND hDlg -
// IN WORD controlID -
// IN INT position -
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
SetListViewSelection( IN HWND hDlg, IN WORD controlID, IN INT position ) {
HWND hListViewWnd;
// get a handle to the list view window
hListViewWnd = GetDlgItem( hDlg, controlID );
ListView_SetItemState( hListViewWnd,
position,
LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED ) ;
}
//----------------------------------------------------------------------------
//
// Function: SetDescription
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
VOID
SetDescription( HWND hwnd, INT index ) {
INT_PTR iListViewCount;
NETWORK_COMPONENT* tempEntry;
tempEntry = GetListViewIndex( hwnd, IDC_LVW_COMPLIST, index );
iListViewCount = SendDlgItemMessage( hwnd,
IDC_LVW_COMPLIST,
LVM_GETITEMCOUNT,
0,
0 );
//
// if there are no entries, then clear the description box
// else display the description
//
if( iListViewCount == 0 ) {
SendDlgItemMessage( hwnd,
IDC_TXT_COMPDESC,
WM_SETTEXT,
(WPARAM) 0,
(LPARAM) _T("") );
}
else {
SendDlgItemMessage( hwnd,
IDC_TXT_COMPDESC,
WM_SETTEXT,
(WPARAM) 0,
(LPARAM) tempEntry->StrComponentDescription );
}
}
//----------------------------------------------------------------------------
//
// Function: GetSelectedItemFromListView
//
// Purpose: searches through the List View specified by controlID
// returns the found item in the lvI parameter
//
// Arguments:
//
// Returns: function returns TRUE if there was an item selected and it
// found it,
// FALSE if there was no item selected
//
//----------------------------------------------------------------------------
BOOL
GetSelectedItemFromListView( HWND hwndDlg, WORD controlID, LVITEM* lvI )
{
INT i;
INT iCount;
HWND hListView = GetDlgItem( hwndDlg, controlID );
UINT uMask = LVIS_SELECTED | LVIS_FOCUSED;
UINT uState;
BOOL bSelectedItemFound = FALSE;
iCount = ListView_GetItemCount( hListView );
//
// cycle through the list until the selected item is found
//
i = 0;
while( !bSelectedItemFound && i < iCount )
{
uState = ListView_GetItemState( hListView, i, uMask );
if( uState == uMask )
{
//
// found the selected item
//
bSelectedItemFound = TRUE;
memset( lvI, 0, sizeof( LVITEM ) );
lvI->iItem = i;
lvI->mask = LVIF_PARAM;
ListView_GetItem( hListView, lvI );
return( TRUE );
}
i++;
}
return( FALSE );
}
//----------------------------------------------------------------------------
//
// Function: InsertEntryIntoListView
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
BOOL
InsertEntryIntoListView( HWND hListViewWnd,
LPARAM lParam )
{
LVITEM lvI;
NETWORK_COMPONENT *pListViewEntry = (NETWORK_COMPONENT *)lParam;
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvI.iItem = 0;
lvI.iSubItem = 0;
lvI.pszText = LPSTR_TEXTCALLBACK;
lvI.cchTextMax = MAX_ITEMLEN;
lvI.lParam = lParam;
lvI.state = LVIS_SELECTED | LVIS_FOCUSED;
lvI.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
lvI.iImage = 0;
switch( pListViewEntry->ComponentType ) {
case CLIENT: lvI.iImage = 0; break;
case SERVICE: lvI.iImage = 1; break;
case PROTOCOL: lvI.iImage = 2; break;
}
if ( ListView_InsertItem( hListViewWnd, &lvI ) == -1 )
return( FALSE );
ListView_SortItems( hListViewWnd, ListViewCompareFunc, (LPARAM)NULL );
return( TRUE );
}
//----------------------------------------------------------------------------
//
// Function: InitListView
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
BOOL
InitListView( HWND hDlg, HINSTANCE hInst ) {
HICON hIcon1, hIcon2, hIcon3; // handles to icons
HIMAGELIST hSmall; // handle to image list for small icons
LVCOLUMN lvCol;
RECT rect;
//
// Initialize the list view window
// First initialize the image lists you will need:
// create image list for the small icons
//
hSmall = ImageList_Create( BITMAP_WIDTH, BITMAP_HEIGHT, ILC_MASK, 3, 0 );
//
// Load the icons and add them to the image list
//
hIcon1 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_CLIENT) );
hIcon2 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_SERVICE) );
hIcon3 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_PROTOCOL) );
if( ImageList_AddIcon(hSmall, hIcon1) == -1 )
return( FALSE );
if( ImageList_AddIcon(hSmall, hIcon2) == -1 )
return( FALSE );
if( ImageList_AddIcon(hSmall, hIcon3) == -1 )
return( FALSE );
// Be sure that all the icons were added
if ( ImageList_GetImageCount( hSmall ) < 3 )
return( FALSE );
// Associate the image list with the list view control
SendDlgItemMessage( hDlg,
IDC_LVW_COMPLIST,
LVM_SETIMAGELIST,
(WPARAM) LVSIL_SMALL,
(LPARAM) hSmall );
//
// Using a "Report" list view so make it 1 column that is the width of
// the list view
//
GetClientRect( GetDlgItem( hDlg, IDC_LVW_COMPLIST ),
&rect );
SendDlgItemMessage( hDlg,
IDC_LVW_COMPLIST,
LVM_SETCOLUMNWIDTH,
(WPARAM) 0,
(LPARAM) rect.right );
// The mask specifies that the fmt, width and pszText members
// of the structure are valid
lvCol.mask = LVCF_FMT | LVCF_WIDTH;
lvCol.fmt = LVCFMT_LEFT; // left-align column
lvCol.cx = rect.right; // width of column in pixels
SendDlgItemMessage( hDlg,
IDC_LVW_COMPLIST,
LVM_INSERTCOLUMN,
(WPARAM) 0,
(LPARAM) &lvCol );
iCurrentSelection = 0;
return( TRUE );
}
//----------------------------------------------------------------------------
//
// Function: SetNetworkNumberText
//
// Purpose: Changes the caption of Network card # text so the user knows what
// network card he is currently changing settings for
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
VOID
SetNetworkNumberText( IN HWND hwnd, IN INT iCmdShow )
{
HWND hNumNetworkCards;
TCHAR szNetNumber[3]; // 3 so it holds up to a 2 digit string
TCHAR szTempString[MAX_STRING_LEN];
HRESULT hrCat;
hNumNetworkCards = GetDlgItem( hwnd, IDC_NETWORKCARDNUM );
//
// Convert network card int to string
//
_itow( NetSettings.iCurrentNetworkCard, szNetNumber, 10 );
//
// copy "Network Adapter #" string into szTempString
// szTempString is the string being built up that will be displayed
// as the new caption
//
lstrcpyn( szTempString, StrNetworkCardNumber, AS(szTempString) );
//
// concat the current network card number to the rest of the string
//
hrCat=StringCchCat( szTempString, AS(szTempString), szNetNumber );
SetWindowText( hNumNetworkCards, szTempString );
ShowWindow( hNumNetworkCards, iCmdShow );
}
//----------------------------------------------------------------------------
//
// Function: ShowPlugAndPlay
//
// Purpose: Displays Plug and Play box, if necessary
// if the box is displayed then it fills it with the proper data
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
static VOID
ShowPlugAndPlay( IN HWND hwnd,
IN BOOL bShowNetworkText,
IN BOOL bShowEditBox )
{
HWND hPlugAndPlayText = GetDlgItem( hwnd, IDC_PLUGANDPLAYTEXT );
HWND hPlugAndPlayEditBox = GetDlgItem( hwnd, IDC_PLUGANDPLAY_ID );
AssertMsg( NetSettings.pCurrentAdapter != NULL,
"The current network card is null but there are more network cards left." );
//
// Show or hide the Network adapter text and make sure it is displaying
// the right number for the network card.
//
if( bShowNetworkText )
{
//
// change the text to display which network card the user is
// currently on
//
SetNetworkNumberText( hwnd , SW_SHOW );
SetWindowText( hPlugAndPlayEditBox,
NetSettings.pCurrentAdapter->szPlugAndPlayID );
}
else
{
SetNetworkNumberText( hwnd, SW_HIDE );
}
//
// Show or hide the static Plug and Play text and edit box
//
if( bShowEditBox )
{
ShowWindow(hPlugAndPlayText, SW_SHOW );
ShowWindow(hPlugAndPlayEditBox, SW_SHOW );
}
else
{
ShowWindow( hPlugAndPlayText, SW_HIDE );
ShowWindow( hPlugAndPlayEditBox, SW_HIDE );
}
}
//----------------------------------------------------------------------------
//
// Function: FindNode
//
// Purpose: iterate throught the global net component list until the Node
// where the component position matches the iPosition parameter
// return a pointer to this node
// if the node is not found, return NULL
//
// Arguments: INT iPosition - position to return a pointer to in the list
//
// Returns: Pointer to the NETWORK_COMPONENT if found
// NULL if not found
//
//----------------------------------------------------------------------------
NETWORK_COMPONENT*
FindNode( IN INT iPosition )
{
NETWORK_COMPONENT *pNetComponent;
for( pNetComponent = NetSettings.NetComponentsList;
pNetComponent;
pNetComponent = pNetComponent->next )
{
if( pNetComponent->iPosition == iPosition )
{
return( pNetComponent );
}
}
return( NULL );
}
//----------------------------------------------------------------------------
//
// Function: PropertiesHandler
//
// Purpose: called to handle when either the properties button is pushed or
// an item in the list view is double clicked
//
// Arguments:
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
PropertiesHandler( IN HWND hDlg )
{
LVITEM lvI;
NETWORK_COMPONENT *entry;
if( GetSelectedItemFromListView( hDlg, IDC_LVW_COMPLIST, &lvI ) ) {
entry = (NETWORK_COMPONENT *)lvI.lParam;
// if the dialog box has properties, find the right dialog to pop-up
if( entry->bHasPropertiesTab ) {
switch( entry->iPosition ) {
case TCPIP_POSITION:
Create_TCPIP_PropertySheet( hDlg ); break;
case MS_CLIENT_POSITION:
Create_MSClient_PropertySheet( hDlg ); break;
case IPX_POSITION:
Create_MS_NWIPX_PropertySheet( hDlg ); break;
case APPLETALK_POSITION:
Create_Appletalk_PropertySheet( hDlg ); break;
case NETWARE_CLIENT_POSITION:
case GATEWAY_FOR_NETWARE_POSITION:
DialogBox( FixedGlobals.hInstance,
(LPCTSTR) IDD_NWC_WINNT_DLG,
hDlg,
DlgNetwarePage );
break;
default:
AssertMsg( FALSE,
"Bad Switch Case: Entry has Properties but no corresponding Property Sheet" );
break;
}
}
}
}
//----------------------------------------------------------------------------
//
// Function: ListViewHandler
//
// Purpose:
//
// Arguments:
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
ListViewHandler( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam )
{
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
NETWORK_COMPONENT *pListViewEntry;
HWND hPropertiesButton;
pListViewEntry = (NETWORK_COMPONENT *)(pLvdi->item.lParam);
switch( pLvdi->hdr.code )
{
case LVN_GETDISPINFO:
{
pLvdi->item.pszText = pListViewEntry->StrComponentName;
break;
}
}
switch( pNm->hdr.code )
{
case NM_DBLCLK:
{
NMITEMACTIVATE *pNmItemActivate = (NMITEMACTIVATE *) lParam;
//
// see if the user has double clicked inside the list view
//
if( pNm->hdr.idFrom == IDC_LVW_COMPLIST )
{
//
// Make sure they actually clicked on an item and not just
// empty space
//
if( pNmItemActivate->iItem != -1 )
{
PropertiesHandler( hwnd );
}
}
break;
}
case LVN_ITEMCHANGED:
// test to see if a new item in the list has been selected
if( pNm->uNewState == SELECTED )
{
LVITEM lvI;
NETWORK_COMPONENT* currentEntry;
if( ! GetSelectedItemFromListView( hwnd,
IDC_LVW_COMPLIST,
&lvI ) )
{
return;
}
currentEntry = (NETWORK_COMPONENT *)lvI.lParam;
iCurrentSelection = lvI.iItem;
SetDescription( hwnd, lvI.iItem );
// enable or disable the properties button based on their
// selection in the list view
hPropertiesButton = GetDlgItem( hwnd, IDC_PSH_PROPERTIES );
if( currentEntry->bHasPropertiesTab )
{
EnableWindow( hPropertiesButton, TRUE );
}
else
{
EnableWindow( hPropertiesButton, FALSE );
}
}
break;
}
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizNext
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizNext( IN HWND hwnd )
{
if ( IsDlgButtonChecked(hwnd, IDC_CUSTOMNET) == BST_CHECKED )
NetSettings.iNetworkingMethod = CUSTOM_NETWORKING;
else
NetSettings.iNetworkingMethod = TYPICAL_NETWORKING;
}
//----------------------------------------------------------------------------
//
// Function: EnableWindows
//
// Purpose: Enable/Disable windows based on the current selection
//
//
// Arguments: handle to the main window
//
// Returns: none
//
//----------------------------------------------------------------------------
EnableControls( IN HWND hwnd )
{
BOOL fEnable = ( IsDlgButtonChecked(hwnd, IDC_CUSTOMNET) == BST_CHECKED );
EnableWindow(GetDlgItem(hwnd, IDC_LVW_COMPLIST), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_PSH_ADD), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_PSH_REMOVE), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_PSH_PROPERTIES), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_TXT_COMPDESC), fEnable);
EnableWindow(GetDlgItem(hwnd, IDC_DESCRIPTION), fEnable);
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizSetActive
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizSetActive( IN HWND hwnd )
{
UpdateListView( hwnd );
//
// set the selection in the list view to the first item
//
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 0 );
//
// set the description because it might have changed with the new item
// being added
//
SetDescription( hwnd, 0 );
// Check to proper default button
//
if ( NetSettings.iNetworkingMethod == CUSTOM_NETWORKING )
CheckRadioButton( hwnd, IDC_TYPICALNET, IDC_CUSTOMNET, IDC_CUSTOMNET );
else
CheckRadioButton( hwnd, IDC_TYPICALNET, IDC_CUSTOMNET, IDC_TYPICALNET );
// Enable the controls
//
EnableControls(hwnd);
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT );
}
//----------------------------------------------------------------------------
//
// Function: ListViewCompareFunc
//
// Purpose: sorts the list view by component type first
// (Client < Service < Protocol) and within each component type,
// sorts alphabetically
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
INT CALLBACK
ListViewCompareFunc( LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort ) {
NETWORK_COMPONENT *pEntry1 = (NETWORK_COMPONENT *)lParam1;
NETWORK_COMPONENT *pEntry2 = (NETWORK_COMPONENT *)lParam2;
//
// sort by ComponentType first, and then alphabetically
//
if( pEntry1->ComponentType < pEntry2->ComponentType ) {
return(-1);
}
else if( pEntry1->ComponentType > pEntry2->ComponentType ) {
return(1);
}
// Component Types are equal so sort alphabetically
else {
return lstrcmpi( pEntry1->StrComponentName, pEntry2->StrComponentName ) ;
}
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizAdd
//
// Purpose:
//
// Arguments: standard Win32 dialog proc arguments, passed through from the
// Dialog proc
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizAdd( IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam ) {
if ( HIWORD( wParam ) == BN_CLICKED )
{
//
// pop-up the new dialog box and if they actual add
// an item make sure the Uninstall button is enabled
//
if( DialogBox( FixedGlobals.hInstance,
(LPCTSTR) IDD_LAN_COMPONENT_ADD,
hwnd,
AddDeviceDlgProc) )
{
HWND hUninstallButton = GetDlgItem( hwnd, IDC_PSH_REMOVE );
EnableWindow( hUninstallButton, TRUE );
UpdateListView( hwnd );
// set the selection in the list view
// to the first item
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 0 );
// set the description because it might have
// changed with the new item being added
SetDescription( hwnd, 0 );
}
}
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizRemove
//
// Purpose:
//
// Arguments: standard Win32 dialog proc arguments, passed through from the
// Dialog proc
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizRemove( IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam ) {
INT_PTR iListViewCount;
if ( HIWORD( wParam ) == BN_CLICKED ) {
//
// remove the currently selected item from the list view
//
LVITEM lvI;
NETWORK_COMPONENT* pNode;
if( GetSelectedItemFromListView( hwnd,
IDC_LVW_COMPLIST, &lvI ) ) {
pNode = (NETWORK_COMPONENT *)lvI.lParam;
pNode->bInstalled = FALSE;
//
// Update the list view to show the removed
// component is gone
//
UpdateListView( hwnd );
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 1 );
SetDescription( hwnd, 0 );
}
iListViewCount = SendDlgItemMessage( hwnd,
IDC_LVW_COMPLIST,
LVM_GETITEMCOUNT,
(WPARAM) 0,
(LPARAM) 0 );
// if there are no more items in the list view then grey out
// the uninstall and properties button
if( iListViewCount == 0 ) {
HWND hUninstallButton = GetDlgItem( hwnd, IDC_PSH_REMOVE );
HWND hPropertiesButton = GetDlgItem( hwnd, IDC_PSH_PROPERTIES );
EnableWindow( hUninstallButton, FALSE );
EnableWindow( hPropertiesButton, FALSE );
}
}
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizProperties
//
// Purpose:
//
// Arguments: standard Win32 dialog proc arguments, passed through from the
// Dialog proc
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizProperties( IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam ) {
if ( HIWORD( wParam ) == BN_CLICKED ) {
PropertiesHandler( hwnd );
}
}
//----------------------------------------------------------------------------
//
// Function: OnLANWizInitDialog
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnLANWizInitDialog( IN HWND hwnd ) {
INITCOMMONCONTROLSEX CommonControlsStruct;
CommonControlsStruct.dwICC = ICC_INTERNET_CLASSES | ICC_LISTVIEW_CLASSES;
CommonControlsStruct.dwSize = sizeof( INITCOMMONCONTROLSEX );
// Ensure that the common control DLL has loaded the window classes
// for the IP control and the ListView control
InitCommonControlsEx( &CommonControlsStruct );
//
// Load strings from resources
//
StrNetworkCardNumber = MyLoadString( IDS_NETADAPTERNUMBER );
InitListView( hwnd, FixedGlobals.hInstance );
// Set the default description
SetDescription( hwnd, 0 );
}
//----------------------------------------------------------------------------
//
// Function: DlgLANWizardPage
//
// Purpose: Dialog procedure for the LAN Wizard page. (The one that shows
// what Client, Services, and Protocols are to be installed)
//
// Arguments: standard Win32 dialog proc arguments
//
// Returns: standard Win32 dialog proc return value
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK DlgLANWizardPage( IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam )
{
BOOL bStatus = TRUE;
switch( uMsg ) {
case WM_INITDIALOG: {
OnLANWizInitDialog( hwnd );
break;
}
case WM_COMMAND: {
switch ( LOWORD(wParam) ) {
case IDC_TYPICALNET:
case IDC_CUSTOMNET:
EnableControls(hwnd);
break;
case IDC_PSH_ADD:
OnLANWizAdd( hwnd, uMsg, wParam, lParam );
break;
case IDC_PSH_REMOVE:
OnLANWizRemove( hwnd, uMsg, wParam, lParam );
break;
case IDC_PSH_PROPERTIES:
OnLANWizProperties( hwnd, uMsg, wParam, lParam );
break;
}
break; // WM_COMMAND
}
case WM_NOTIFY: {
LPNMHDR pnmh = (LPNMHDR)lParam;
HWND hwndComponentDescription;
if( wParam == IDC_LVW_COMPLIST ) {
ListViewHandler( hwnd, uMsg, wParam, lParam );
}
else {
switch( pnmh->code ) {
case PSN_QUERYCANCEL:
WIZ_CANCEL(hwnd);
break;
case PSN_SETACTIVE:
g_App.dwCurrentHelp = IDH_NET_COMPS;
OnLANWizSetActive( hwnd );
break;
case PSN_WIZBACK:
break;
case PSN_WIZNEXT:
OnLANWizNext( hwnd );
bStatus = FALSE;
break;
case PSN_HELP:
WIZ_HELP();
break;
}
}
break;
}
default: {
bStatus = FALSE;
break;
}
}
return( bStatus );
}