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

239 lines
7.3 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
dlgprint.c
Abstract:
This file implements the dialog proc for the routing
print page.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "wizard.h"
#pragma hdrstop
LRESULT
RoutePrintDlgProc(
HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
static DWORD CountPrinters = 0;
static TCHAR DefaultPrinter[128];
switch( msg ) {
case WM_INITDIALOG:
{
PPRINTER_INFO_4 PrinterInfo;
DWORD i;
DWORD Cnt = 0;
PrinterInfo = MyEnumPrinters( NULL, 4, &CountPrinters, 0);
if (!PrinterInfo) {
return FALSE;
}
SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_RESETCONTENT,
0,
0
);
//
// check the default printer
//
GetProfileString(
TEXT("windows"),
TEXT("device"),
NULL,
DefaultPrinter,
sizeof(DefaultPrinter)
);
if (DefaultPrinter[0]) {
SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_ADDSTRING,
0,
(LPARAM) GetString( IDS_DEFAULT_PRINTER )
);
}
EnableWindow( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ), TRUE );
CheckDlgButton( hwnd, IDC_ANS_YES, BST_CHECKED );
CheckDlgButton( hwnd, IDC_ANS_NO, BST_UNCHECKED );
//
// add the printer names to the combobox
//
for (i=0; i<CountPrinters; i++) {
SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_ADDSTRING,
0,
(LPARAM) PrinterInfo[i].pPrinterName
);
}
SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_SETCURSEL,
0,
0
);
SetFocus( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ));
MemFree( PrinterInfo );
}
break;
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED) {
switch (LOWORD(wParam)) {
case IDC_ANS_YES:
EnableWindow( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ),TRUE );
SetFocus( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ));
break;
case IDC_ANS_NO:
EnableWindow( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ), FALSE );
}
}
break;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
if (Unattended) {
UnAttendGetAnswer(
UAA_ROUTE_PRINT,
(LPBYTE) &WizData.RoutePrint,
sizeof(WizData.RoutePrint)
);
if (WizData.RoutePrint) {
UnAttendGetAnswer(
UAA_DEST_PRINTERLIST,
(LPBYTE) WizData.RoutePrinterName,
sizeof(WizData.RoutePrinterName)/sizeof(WCHAR)
);
if (_wcsicmp( WizData.RoutePrinterName, L"<default>" ) == 0) {
LPTSTR p;
GetProfileString(
TEXT("windows"),
TEXT("device"),
NULL,
WizData.RoutePrinterName,
sizeof(WizData.RoutePrinterName)
);
p = _tcschr( WizData.RoutePrinterName, TEXT(',') );
if (p) {
*p = 0;
}
}
}
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
if (InstallMode != INSTALL_NEW) {
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
if (!CountPrinters) {
//
// this system does not have any printers configured
// skip this wizard page
//
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
case PSN_WIZNEXT:
WizData.RoutePrint = IsDlgButtonChecked( hwnd, IDC_ANS_YES );
if (WizData.RoutePrint) {
int Index = SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_GETCURSEL,
0,
0
);
WizData.UseDefaultPrinter = DefaultPrinter[0] && !Index;
if (WizData.UseDefaultPrinter) {
LPTSTR p;
GetProfileString(
TEXT("windows"),
TEXT("device"),
NULL,
WizData.RoutePrinterName,
sizeof(WizData.RoutePrinterName)
);
p = _tcschr( WizData.RoutePrinterName, TEXT(',') );
if (p) {
*p = 0;
}
} else {
SendDlgItemMessage(
hwnd,
IDC_DEST_PRINTERLIST,
CB_GETLBTEXT,
Index,
(LPARAM) WizData.RoutePrinterName
);
}
if (IsPrinterFaxPrinter( WizData.RoutePrinterName )) {
PopUpMsg( hwnd, IDS_CANT_USE_FAX_PRINTER, TRUE, 0 );
//
// Set Focus to the combo box.
//
SetFocus( GetDlgItem( hwnd, IDC_DEST_PRINTERLIST ));
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
}
break;
}
break;
}
return FALSE;
}