406 lines
11 KiB
C
406 lines
11 KiB
C
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// File Name:
|
||
|
// addevice.c
|
||
|
//
|
||
|
// Description:
|
||
|
// This file contains the dialog proc for the add network component pop-up,
|
||
|
// "Select Network Component Type" (IDD_LAN_COMPONENT_ADD).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
#include "resource.h"
|
||
|
|
||
|
#define NUMBER_OF_TYPES_OF_COMPONENTS 3
|
||
|
|
||
|
//
|
||
|
// prototypes
|
||
|
//
|
||
|
|
||
|
INT_PTR CALLBACK
|
||
|
SelectNetworkClientDlgProc( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam );
|
||
|
|
||
|
INT_PTR CALLBACK
|
||
|
SelectNetworkServiceDlgProc( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam );
|
||
|
|
||
|
INT_PTR CALLBACK
|
||
|
SelectNetworkProtocolDlgProc( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam );
|
||
|
|
||
|
static COMPONENT_TYPE CurrentSelection; // holds the current selection in the list view
|
||
|
|
||
|
static NETWORK_COMPONENT rgListViewAddEntries[NUMBER_OF_TYPES_OF_COMPONENTS];
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: InitAddListView
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
BOOL
|
||
|
InitAddListView( HWND hDlg, HINSTANCE hInst )
|
||
|
{
|
||
|
|
||
|
LV_ITEM lvI; // list view item structure
|
||
|
HICON hIcon1, hIcon2, hIcon3; // handles to icons
|
||
|
HIMAGELIST hSmall; // handle to image list for small icons
|
||
|
HWND hListViewWnd; // handle to list view window
|
||
|
int index;
|
||
|
|
||
|
hListViewWnd = GetDlgItem( hDlg, IDC_LVW_LAN_COMPONENTS );
|
||
|
|
||
|
// 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
|
||
|
ListView_SetImageList(hListViewWnd, hSmall, LVSIL_SMALL);
|
||
|
|
||
|
// Finally, add the actual items to the control
|
||
|
// Fill out the LV_ITEM structure for each of the items to add to the list
|
||
|
// The mask specifies the the pszText, iImage, lParam and state
|
||
|
// members of the LV_ITEM structure are valid
|
||
|
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
|
||
|
|
||
|
for (index = 0; index < 3; index++) {
|
||
|
lvI.iItem = index;
|
||
|
lvI.iSubItem = 0;
|
||
|
lvI.iImage = index;
|
||
|
// The parent window is responsible for storing the text
|
||
|
// The list view control will send an LVN_GETDISPINFO
|
||
|
// when it needs the text to display
|
||
|
lvI.pszText = LPSTR_TEXTCALLBACK;
|
||
|
lvI.cchTextMax = MAX_ITEMLEN;
|
||
|
lvI.lParam = (LPARAM)&rgListViewAddEntries[index];
|
||
|
|
||
|
// Select the first item
|
||
|
if (index == 0)
|
||
|
{
|
||
|
lvI.state = lvI.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
}
|
||
|
else // leave the others unselected
|
||
|
{
|
||
|
lvI.state = lvI.stateMask = 0;
|
||
|
}
|
||
|
|
||
|
if (ListView_InsertItem(hListViewWnd, &lvI) == -1)
|
||
|
return FALSE ;
|
||
|
|
||
|
}
|
||
|
|
||
|
return( TRUE );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnAddDeviceInitDialog
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnAddDeviceInitDialog( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Initialize the array for the list view by loading the string
|
||
|
// resources the properties field nor the installed flag is valid
|
||
|
// for this screen so just set it to a value
|
||
|
//
|
||
|
rgListViewAddEntries[0].StrComponentName = MyLoadString( IDS_CLIENT );
|
||
|
rgListViewAddEntries[0].StrComponentDescription = MyLoadString( IDS_CLIENT_DESCRIPTION );
|
||
|
rgListViewAddEntries[0].ComponentType = CLIENT;
|
||
|
rgListViewAddEntries[0].bHasPropertiesTab = FALSE;
|
||
|
rgListViewAddEntries[0].bInstalled = FALSE;
|
||
|
|
||
|
rgListViewAddEntries[1].StrComponentName = MyLoadString( IDS_SERVICE );
|
||
|
rgListViewAddEntries[1].StrComponentDescription = MyLoadString( IDS_SERVICE_DESCRIPTION );
|
||
|
rgListViewAddEntries[1].ComponentType = SERVICE;
|
||
|
rgListViewAddEntries[1].bHasPropertiesTab = FALSE;
|
||
|
rgListViewAddEntries[1].bInstalled = FALSE;
|
||
|
|
||
|
rgListViewAddEntries[2].StrComponentName = MyLoadString( IDS_PROTOCOL );
|
||
|
rgListViewAddEntries[2].StrComponentDescription = MyLoadString( IDS_PROTOCOL_DESCRIPTION );
|
||
|
rgListViewAddEntries[2].ComponentType = PROTOCOL;
|
||
|
rgListViewAddEntries[2].bHasPropertiesTab = FALSE;
|
||
|
rgListViewAddEntries[2].bInstalled = FALSE;
|
||
|
|
||
|
InitAddListView(hwnd, FixedGlobals.hInstance);
|
||
|
|
||
|
CurrentSelection = CLIENT; // initialize the list view to the first one being selected
|
||
|
|
||
|
// TODO: design issue, should there be a default description and if there is, should
|
||
|
// the corresponding list view entry already be selected
|
||
|
// Set the default description
|
||
|
SetWindowText( GetDlgItem( hwnd, IDC_TXT_COMPONENT_DESC ),
|
||
|
rgListViewAddEntries[0].StrComponentDescription);
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnAddButtonClicked
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static VOID
|
||
|
OnAddButtonClicked( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
switch( CurrentSelection ) {
|
||
|
|
||
|
INT_PTR iReturnValue;
|
||
|
|
||
|
//
|
||
|
// for each case it pops-up the appropriate dialog box and then passes
|
||
|
// the return value back to the main LAN wizard page
|
||
|
//
|
||
|
case CLIENT: {
|
||
|
|
||
|
iReturnValue = DialogBox( FixedGlobals.hInstance,
|
||
|
(LPCTSTR)IDD_SELECT_CLIENT,
|
||
|
hwnd,
|
||
|
SelectNetworkClientDlgProc );
|
||
|
|
||
|
EndDialog( hwnd, iReturnValue );
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
case SERVICE: {
|
||
|
|
||
|
iReturnValue = DialogBox( FixedGlobals.hInstance,
|
||
|
(LPCTSTR)IDD_SELECT_SERVICE,
|
||
|
hwnd,
|
||
|
SelectNetworkServiceDlgProc );
|
||
|
|
||
|
EndDialog( hwnd, iReturnValue );
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
case PROTOCOL: {
|
||
|
|
||
|
iReturnValue = DialogBox( FixedGlobals.hInstance,
|
||
|
(LPCTSTR)IDD_SELECT_PROTOCOL,
|
||
|
hwnd,
|
||
|
SelectNetworkProtocolDlgProc );
|
||
|
|
||
|
EndDialog( hwnd, iReturnValue );
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: NotifyHandler
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog
|
||
|
// IN WPARAM wParam -
|
||
|
// IN LPARAM lParam -
|
||
|
//
|
||
|
// Returns: BOOL - whether the message was handled or not
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static BOOL
|
||
|
NotifyHandler( IN HWND hwnd, IN WPARAM wParam, IN LPARAM lParam )
|
||
|
{
|
||
|
|
||
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
||
|
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
|
||
|
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
|
||
|
NETWORK_COMPONENT *pListViewString = (NETWORK_COMPONENT *)(pLvdi->item.lParam);
|
||
|
HWND hwndComponentDescription;
|
||
|
HWND hButton;
|
||
|
BOOL bStatus = TRUE;
|
||
|
|
||
|
if( wParam == IDC_LVW_LAN_COMPONENTS )
|
||
|
{
|
||
|
|
||
|
switch(pLvdi->hdr.code)
|
||
|
{
|
||
|
case LVN_GETDISPINFO:
|
||
|
pLvdi->item.pszText = pListViewString->StrComponentName;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
switch(pNm->hdr.code)
|
||
|
{
|
||
|
case LVN_ITEMCHANGED:
|
||
|
|
||
|
if( pNm->uNewState == SELECTED ) // test to see if a new item in the list has been selected
|
||
|
{
|
||
|
CurrentSelection = pNm->iItem;
|
||
|
|
||
|
hwndComponentDescription = GetDlgItem( hwnd, IDC_TXT_COMPONENT_DESC );
|
||
|
|
||
|
SetWindowText( hwndComponentDescription,
|
||
|
rgListViewAddEntries[CurrentSelection].StrComponentDescription );
|
||
|
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
case NM_DBLCLK:
|
||
|
{
|
||
|
|
||
|
NMITEMACTIVATE *pNmItemActivate = (NMITEMACTIVATE *) lParam;
|
||
|
|
||
|
//
|
||
|
// see if the user has double clicked inside the list view
|
||
|
//
|
||
|
|
||
|
if( pNm->hdr.idFrom == IDC_LVW_LAN_COMPONENTS )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Make sure they actually clicked on an item and not just
|
||
|
// empty space
|
||
|
//
|
||
|
|
||
|
if( pNmItemActivate->iItem != -1 )
|
||
|
{
|
||
|
OnAddButtonClicked( hwnd );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
|
||
|
bStatus = FALSE;
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return( bStatus );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: AddDeviceDlgProc
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
INT_PTR CALLBACK
|
||
|
AddDeviceDlgProc( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam)
|
||
|
{
|
||
|
|
||
|
BOOL bStatus = TRUE;
|
||
|
|
||
|
switch( uMsg ) {
|
||
|
|
||
|
case WM_INITDIALOG: {
|
||
|
|
||
|
OnAddDeviceInitDialog( hwnd );
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
{
|
||
|
int nButtonId;
|
||
|
|
||
|
switch ( nButtonId = LOWORD(wParam) ) {
|
||
|
|
||
|
case IDC_PSB_COMPONENT_ADD:
|
||
|
OnAddButtonClicked( hwnd );
|
||
|
break;
|
||
|
|
||
|
case IDCANCEL:
|
||
|
EndDialog(hwnd, 0);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
bStatus = FALSE;
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WM_NOTIFY:
|
||
|
|
||
|
bStatus = NotifyHandler( hwnd, wParam, lParam );
|
||
|
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
|
||
|
bStatus = FALSE;
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
return( bStatus );
|
||
|
|
||
|
}
|