|
|
//----------------------------------------------------------------------------
//
// 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 );
}
|