windows-nt/Source/XPSP1/NT/printscan/fax/setup/wizdll/dlgdvsel.c
2020-09-26 16:20:57 +08:00

203 lines
6.1 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
dlgdvsel.c
Abstract:
This file implements the dialog proc for the workstation
device selection page.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "wizard.h"
#pragma hdrstop
LRESULT
DeviceSelectionDlgProc(
HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
static HWND hwndList;
static DWORD TotalDevicesSelected;
switch( msg ) {
case WM_INITDIALOG:
{
HIMAGELIST himlState;
int iItem = 0;
DWORD i;
LV_ITEM lvi;
LV_COLUMN lvc = {0};
for (i=0,lvi.iItem=0,TotalDevicesSelected=0; i<FaxDevices; i++) {
LineInfo[i].Selected = TRUE;
TotalDevicesSelected += 1;
if (RequestedSetupType & FAX_INSTALL_WORKSTATION && TotalDevicesSelected == MAX_DEVICES_NTW) {
break;
}
}
hwndList = GetDlgItem( hwnd, IDC_DEVICE_LIST );
//
// set/initialize the image list(s)
//
himlState = ImageList_Create( 16, 16, TRUE, 2, 0 );
ImageList_AddMasked(
himlState,
LoadBitmap( FaxWizModuleHandle, MAKEINTRESOURCE(IDB_CHECKSTATES) ),
RGB (255,0,0)
);
ListView_SetImageList( hwndList, himlState, LVSIL_STATE );
//
// set/initialize the columns
//
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = 274;
lvc.pszText = TEXT("Device Name");
lvc.iSubItem = 0;
ListView_InsertColumn( hwndList, lvc.iSubItem, &lvc );
//
// add the data to the list
//
for (i=0,lvi.iItem=0; i<FaxDevices; i++) {
lvi.pszText = LineInfo[i].DeviceName;
lvi.iItem += 1;
lvi.iSubItem = 0;
lvi.iImage = 0;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvi.state = LineInfo[i].Selected ? LVIS_GCCHECK : LVIS_GCNOCHECK;
lvi.stateMask = LVIS_STATEIMAGEMASK;
iItem = ListView_InsertItem( hwndList, &lvi );
}
}
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
if (Unattended) {
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
if (InstallMode & INSTALL_UPGRADE || InstallMode & INSTALL_REMOVE || FaxDevices == 1) {
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
case NM_CLICK:
{
DWORD dwpos;
LV_HITTESTINFO lvhti;
int iItemClicked;
UINT state;
//
// Find out where the cursor was
//
dwpos = GetMessagePos();
lvhti.pt.x = LOWORD(dwpos);
lvhti.pt.y = HIWORD(dwpos);
MapWindowPoints( HWND_DESKTOP, hwndList, &lvhti.pt, 1 );
//
// Now do a hittest with this point.
//
iItemClicked = ListView_HitTest( hwndList, &lvhti );
if (lvhti.flags & LVHT_ONITEMSTATEICON) {
//
// Now lets get the state from the item and toggle it.
//
state = ListView_GetItemState(
hwndList,
iItemClicked,
LVIS_STATEIMAGEMASK
);
if (state == LVIS_GCCHECK) {
//
// de-selecting a device
//
if (TotalDevicesSelected == 1) {
MessageBeep(0);
break;
}
TotalDevicesSelected -= 1;
LineInfo[iItemClicked].Selected = FALSE;
ListView_SetItemState(
hwndList,
iItemClicked,
LVIS_GCNOCHECK,
LVIS_STATEIMAGEMASK
);
} else {
//
// selecting a new device
//
if (RequestedSetupType & FAX_INSTALL_WORKSTATION && TotalDevicesSelected == MAX_DEVICES_NTW) {
MessageBeep(0);
break;
}
TotalDevicesSelected += 1;
LineInfo[iItemClicked].Selected = TRUE;
ListView_SetItemState(
hwndList,
iItemClicked,
LVIS_GCNOCHECK,
LVIS_STATEIMAGEMASK
);
}
}
}
}
break;
}
return FALSE;
}