|
|
/*****************************************************************************
* * (C) COPYRIGHT MICROSOFT CORPORATION, 2000 * * TITLE: printopt.cpp * * VERSION: 1.0 * * AUTHOR: RickTu * * DATE: 10/18/00 * * DESCRIPTION: Implements code for the print options page of the * print photos wizard... * *****************************************************************************/
#include <precomp.h>
#pragma hdrstop
#define LENGTH_OF_MEDIA_NAME 64
/*****************************************************************************
EnumPrintersWrap -- Wrapper function for spooler API EnumPrinters
Arguments:
pServerName - Specifies the name of the print server level - Level of PRINTER_INFO_x structure pcPrinters - Returns the number of printers enumerated dwFlags - Flag bits passed to EnumPrinters
Return Value:
Pointer to an array of PRINTER_INFO_x structures NULL if there is an error
*****************************************************************************/
PVOID EnumPrintersWrap( LPTSTR pServerName, DWORD level, PDWORD pcPrinters, DWORD dwFlags )
{ WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::EnumPrintersWrap()")));
PBYTE pPrinterInfo = NULL; int iTry = -1; DWORD cbNeeded = 0; BOOL bStatus = FALSE;
for( ;; ) { if( iTry++ >= ENUM_MAX_RETRY ) { // max retry count reached. this is also
// considered out of memory case
break; }
// call EnumPrinters...
bStatus = EnumPrinters(dwFlags, pServerName, level, pPrinterInfo, cbNeeded, &cbNeeded, pcPrinters); if( !bStatus && (ERROR_INSUFFICIENT_BUFFER == GetLastError()) && cbNeeded ) { // buffer too small case
if (pPrinterInfo) { delete [] pPrinterInfo; }
WIA_TRACE((TEXT("EnumPrintersWrap: trying to allocate %d bytes"),cbNeeded)); if( pPrinterInfo = (PBYTE) new BYTE[cbNeeded] ) { continue; } }
break; }
if( bStatus ) { return pPrinterInfo; }
//
// clean up if fail
//
if (pPrinterInfo) { delete [] pPrinterInfo; }
return NULL; }
/*****************************************************************************
GetPrinterWrap -- Wrapper function for GetPrinter spooler API
Arguments:
szPrinterName - Printer name dwLevel - Specifies the level of PRINTER_INFO_x structure requested
Return Value:
Pointer to a PRINTER_INFO_x structure, NULL if there is an error
*****************************************************************************/
PVOID GetPrinterWrap( LPTSTR szPrinterName, DWORD dwLevel )
{ WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::GetPrinterWrap()")));
int iTry = -1; HANDLE hPrinter = NULL; PBYTE pPrinterInfo = NULL; DWORD cbNeeded = 0; BOOL bStatus = FALSE; PRINTER_DEFAULTS PrinterDefaults;
PrinterDefaults.pDatatype = NULL; PrinterDefaults.pDevMode = NULL; PrinterDefaults.DesiredAccess = PRINTER_READ; //PRINTER_ALL_ACCESS;
if (!OpenPrinter( szPrinterName, &hPrinter, &PrinterDefaults )) { return NULL; }
for( ;; ) { if( iTry++ >= ENUM_MAX_RETRY ) { // max retry count reached. this is also
// considered out of memory case
WIA_TRACE(("Exceed max retries...")); break; }
// call EnumPrinters...
bStatus = GetPrinter( hPrinter, dwLevel, pPrinterInfo, cbNeeded, &cbNeeded ); if( !bStatus && (ERROR_INSUFFICIENT_BUFFER == GetLastError()) && cbNeeded ) { // buffer too small case
if (pPrinterInfo) { delete [] pPrinterInfo; }
WIA_TRACE((TEXT("GetPrinterWrap: trying to allocate %d bytes"),cbNeeded)); if( pPrinterInfo = (PBYTE) new BYTE[cbNeeded] ) { continue; } }
break; }
ClosePrinter( hPrinter );
if( bStatus ) { return pPrinterInfo; }
//
// clean up if fail
//
if (pPrinterInfo) { delete [] pPrinterInfo; }
return NULL; }
#ifdef FILTER_OUT_FAX_PRINTER
#include <faxreg.h>
/*****************************************************************************
IsFaxPrinter -- test whether the given printer is a fax printer
Arguments:
szPrinterName - Printer name pPrinterInfo - PRINTER_INFO_2 printer info of given printer
if they both have value, we only check szPrinterName.
Return Value:
TRUE if given printer is a fax printer, FALSE otherwise
*****************************************************************************/
BOOL IsFaxPrinter ( LPTSTR szPrinterName, PPRINTER_INFO_2 pPrinterInfo ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::IsFaxPrinter( %s )"),szPrinterName ? szPrinterName : TEXT("NULL POINTER!")));
BOOL bRet = FALSE;
if( !szPrinterName && !pPrinterInfo ) { return FALSE; }
if( szPrinterName ) { pPrinterInfo = (PPRINTER_INFO_2)GetPrinterWrap( szPrinterName, 2 );
if( pPrinterInfo ) { bRet = (0 == lstrcmp( pPrinterInfo->pDriverName, FAX_DRIVER_NAME )) || ( pPrinterInfo->Attributes & PRINTER_ATTRIBUTE_FAX ); delete [] pPrinterInfo;
return bRet; } else { WIA_ERROR((TEXT("Can't get printer info for %s!"), szPrinterName)); } }
return ((0 == lstrcmp(pPrinterInfo->pDriverName, FAX_DRIVER_NAME)) || (pPrinterInfo->Attributes & PRINTER_ATTRIBUTE_FAX)); } #endif
/*****************************************************************************
CPrintOptionsPage -- constructor/desctructor
<Notes>
*****************************************************************************/
CPrintOptionsPage::CPrintOptionsPage( CWizardInfoBlob * pBlob ) : _hLibrary( NULL ), _pfnPrinterSetup( NULL ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::CPrintOptionsPage()"))); _pWizInfo = pBlob; if (_pWizInfo) { _pWizInfo->AddRef(); }
}
CPrintOptionsPage::~CPrintOptionsPage() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::~CPrintOptionsPage()")));
if (_pWizInfo) { _pWizInfo->Release(); _pWizInfo = NULL; }
_FreePrintUI(); }
/*****************************************************************************
CPrintOptionsPage::_bLoadLibrary -- load library printui.dll
Return value: TRUE for success, FALSE for error
*****************************************************************************/
BOOL CPrintOptionsPage::_LoadPrintUI( ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_LoadPrintUI()")));
if (_hLibrary && _pfnPrinterSetup) { WIA_TRACE((TEXT("_LoadPrintUI: already loaded printui, returning TRUE"))); return TRUE; }
if (!_hLibrary) { _hLibrary = LoadLibrary( g_szPrintLibraryName ); if (!_hLibrary) { WIA_ERROR((TEXT("_LoadPrintUI: Can't load library printui.dll!"))); } }
if( _hLibrary && !_pfnPrinterSetup ) { _pfnPrinterSetup = (PF_BPRINTERSETUP) ::GetProcAddress( _hLibrary, g_szPrinterSetup );
if( _pfnPrinterSetup ) { return TRUE; } else { WIA_ERROR((TEXT("_LoadPrintUI: Can't get correct proc address for %s!"),g_szPrinterSetup)); }
}
if( _hLibrary ) { FreeLibrary( _hLibrary ); _hLibrary = NULL; _pfnPrinterSetup = NULL; }
return FALSE; }
/*****************************************************************************
CPrintOptionsPage::_FreePrintUI -- release library printui.dll
Return value: no return value
*****************************************************************************/
VOID CPrintOptionsPage::_FreePrintUI( ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_FreePrintUI()")));
if( _hLibrary ) { FreeLibrary( _hLibrary ); _hLibrary = NULL; _pfnPrinterSetup = NULL; }
return; }
/*****************************************************************************
CPrintOptionsPage::_ValidateControls -- validate controls in this page depending on printer selection
Arguments:
None
Return value: no return value
*****************************************************************************/
VOID CPrintOptionsPage::_ValidateControls( ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_ValidateControls()")));
HWND hCtrl; LRESULT iCount; BOOL bEnabled = TRUE;
if( hCtrl = GetDlgItem( _hDlg, IDC_CHOOSE_PRINTER )) { iCount = SendMessage( hCtrl, CB_GETCOUNT, 0, 0L ); if( iCount == CB_ERR ) { // no change ?
return; } else if( iCount == 0 ) { bEnabled = FALSE; }
ShowWindow( GetDlgItem( _hDlg, IDC_NO_PRINTER_TEXT), bEnabled ? SW_HIDE : SW_SHOW); EnableWindow( GetDlgItem(_hDlg, IDC_PRINTER_PREFERENCES), bEnabled ); PropSheet_SetWizButtons( GetParent(_hDlg), PSWIZB_BACK | ( bEnabled ? PSWIZB_NEXT : 0 )); }
return; }
/*****************************************************************************
CPrintOptionsPage::_HandleSelectPrinter -- reset the combo box content when user changes the printer selection
Arguments:
None
Return value: no return value
*****************************************************************************/
VOID CPrintOptionsPage::_HandleSelectPrinter() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_HandleSelectPrinter()")));
HWND hCtrl; LRESULT iCurSel; TCHAR szPrinterName[MAX_PATH];
hCtrl = GetDlgItem( _hDlg, IDC_CHOOSE_PRINTER );
if( hCtrl ) { //
// this also takes care of empty combo box situation,
// the function will return CB_ERR if the combo box is
// empty.
//
iCurSel = SendMessage( hCtrl, CB_GETCURSEL, 0, 0L ); if( iCurSel == CB_ERR ) { return; }
*szPrinterName = 0; SendMessage( hCtrl, CB_GETLBTEXT, (WPARAM)iCurSel, (LPARAM)szPrinterName ); _strPrinterName.Assign(szPrinterName);
//
// change the hDevMode for selected printer
//
PPRINTER_INFO_2 pPrinterInfo2; pPrinterInfo2 = (PPRINTER_INFO_2)GetPrinterWrap( szPrinterName, 2 );
if( pPrinterInfo2 ) { //
// update cached information...
//
_UpdateCachedInfo( pPrinterInfo2->pDevMode );
//
// Save port name...
//
_strPortName.Assign( pPrinterInfo2->pPortName );
delete [] pPrinterInfo2; } else { WIA_ERROR((TEXT("Can't get printer info for %s!"), szPrinterName)); }
}
//
// refresh the content of media type list
//
_ShowCurrentMedia( _strPrinterName.String(), _strPortName.String() );
return; }
/*****************************************************************************
CPrintOptionsPage::_ShowCurrentMedia -- modify the combobox list of the media type.
Return value: None.
*****************************************************************************/
VOID CPrintOptionsPage::_ShowCurrentMedia( LPCTSTR pszPrinterName, LPCTSTR pszPortName ) { BOOL bEnable = FALSE;
DWORD dwCountType = DeviceCapabilities( pszPrinterName, pszPortName, DC_MEDIATYPES, NULL, NULL );
DWORD dwCountName = DeviceCapabilities( pszPrinterName, pszPortName, DC_MEDIATYPENAMES, NULL, NULL );
WIA_ASSERT( dwCountType == dwCountName ); if( ( (dwCountType != (DWORD)-1) && (dwCountType != 0) ) && ( (dwCountName != (DWORD)-1) && (dwCountName != 0) ) ) { LPDWORD pdwMediaType = (LPDWORD) new BYTE[dwCountType * sizeof(DWORD)]; LPTSTR pszMediaType = (LPTSTR) new BYTE[dwCountName * LENGTH_OF_MEDIA_NAME * sizeof(TCHAR)];
if( pdwMediaType && pszMediaType ) {
dwCountType = DeviceCapabilities( pszPrinterName, pszPortName, DC_MEDIATYPES, (LPTSTR)pdwMediaType, NULL );
dwCountName = DeviceCapabilities( pszPrinterName, pszPortName, DC_MEDIATYPENAMES, (LPTSTR)pszMediaType, NULL );
WIA_ASSERT( dwCountType == dwCountName ); if ( ( (dwCountType != (DWORD)-1) && (dwCountType != 0) ) && ( (dwCountName != (DWORD)-1) && (dwCountName != 0) ) ) { //
// Find the currently selected media type...
//
if (_pWizInfo) { PDEVMODE pDevMode = _pWizInfo->GetDevModeToUse(); if (pDevMode) { //
// find index of currently selected item...
//
DWORD dwCurMedia = 0; for (INT i=0; i < (INT)dwCountType; i++) { if (pdwMediaType[i] == pDevMode->dmMediaType) { dwCurMedia = i; } }
//
// Set the current media type in the control...
//
if (dwCurMedia < dwCountName) { SetDlgItemText( _hDlg, IDC_CURRENT_PAPER, (LPCTSTR)&pszMediaType[ dwCurMedia * LENGTH_OF_MEDIA_NAME ] ); bEnable = TRUE; } } } } }
if (pdwMediaType) { delete [] pdwMediaType; }
if (pszMediaType) { delete [] pszMediaType; } }
EnableWindow( GetDlgItem( _hDlg, IDC_CURRENT_PAPER_LABEL ), bEnable ); ShowWindow( GetDlgItem( _hDlg, IDC_CURRENT_PAPER_LABEL ), bEnable ? SW_SHOW : SW_HIDE ); EnableWindow( GetDlgItem( _hDlg, IDC_CURRENT_PAPER ), bEnable ); ShowWindow( GetDlgItem( _hDlg, IDC_CURRENT_PAPER ), bEnable ? SW_SHOW : SW_HIDE ); }
/*****************************************************************************
CPrintOptionsPage::_UpdateCachedInfo
Given a devnode, updates _pWizInfo w/new cached information...
*****************************************************************************/
VOID CPrintOptionsPage::_UpdateCachedInfo( PDEVMODE pDevMode ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_UpdateCachedInfo()")));
//
// New devmode to use, cache it...
//
if (_pWizInfo) { //
// User could have changed things which make
// our preview assumptions invalid...
//
_pWizInfo->SetPreviewsAreDirty(TRUE);
//
// Store the devmode to use going forward...
//
WIA_TRACE((TEXT("CPrintOptionsPage::_UpdateCachedInfo - saving pDevMode of 0x%x"),pDevMode)); _pWizInfo->SetDevModeToUse( pDevMode );
//
// Create an HDC that works for this new devmode...
//
HDC hDCPrint = CreateDC( TEXT("WINSPOOL"), _strPrinterName.String(), NULL, pDevMode ); if (hDCPrint) { //
// Turn on ICM for this hDC just for parity's sake with
// final hDC we will use to print...
//
SetICMMode( hDCPrint, ICM_ON );
//
// Hand off DC to pWizInfo
//
_pWizInfo->SetCachedPrinterDC( hDCPrint );
}
}
}
/*****************************************************************************
CPrintOptionsPage::_HandlePrinterPreferences
Handle when "Printer Preferences" is pressed...
*****************************************************************************/
VOID CPrintOptionsPage::_HandlePrinterPreferences() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_HandlePrinterPreferences()")));
//
// Get a handle to the printer...
//
HANDLE hPrinter = NULL; if (OpenPrinter( (LPTSTR)_strPrinterName.String(), &hPrinter, NULL ) && hPrinter) { //
// Get the size of the devmode needed...
//
LONG lSize = DocumentProperties( _hDlg, hPrinter, (LPTSTR)_strPrinterName.String(), NULL, NULL, 0 ); if (lSize) { PDEVMODE pDevMode = (PDEVMODE)new BYTE[lSize]; if (pDevMode) {
WIA_TRACE((TEXT("CPrintOptionsPage::_HandlePrinterPreferences - calling DocumentProperties with DM_IN_BUFFER of 0x%x"),_pWizInfo->GetDevModeToUse() )); if (IDOK == DocumentProperties( _hDlg, hPrinter, (LPTSTR)_strPrinterName.String(), pDevMode, _pWizInfo->GetDevModeToUse(), DM_OUT_BUFFER | DM_IN_BUFFER | DM_PROMPT)) { //
// Set these settings as the current ones for this app
//
_UpdateCachedInfo( pDevMode );
}
//
// clean up so we don't leak...
//
delete [] pDevMode;
} } }
//
// Get printer info so we have portname...
//
_ShowCurrentMedia( _strPrinterName.String(), _strPortName.String() ); }
/*****************************************************************************
CPrintOptionsPage::_HandleInstallPrinter
Handle when "Install Printer..." is pressed
*****************************************************************************/
VOID CPrintOptionsPage::_HandleInstallPrinter() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_HandleInstallPrinter()")));
if( _LoadPrintUI() && _pfnPrinterSetup ) { TCHAR szPrinterName[ MAX_PATH ]; *szPrinterName = 0; UINT iPrinterNameLen = 0;
//
// Invoke the add printer wizard.
//
if( _pfnPrinterSetup( _hDlg, // Parent window handle
1, // Action code, 1 for modal, 11 for modeless
MAX_PATH, // Length of printer name buffer
szPrinterName, // Pointer to printer name
&iPrinterNameLen, // Return length of printer name.
NULL ) ) // Server name, NULL for local
{ LRESULT iNew;
HWND hCtrl = GetDlgItem( _hDlg, IDC_CHOOSE_PRINTER );
#ifdef FILTER_OUT_FAX_PRINTER
if( hCtrl && !IsFaxPrinter( szPrinterName, NULL ) && #else
if( hCtrl && #endif
CB_ERR == SendMessage( hCtrl, CB_FINDSTRINGEXACT, 0, (LPARAM)szPrinterName ) ) { iNew = SendMessage( hCtrl, CB_ADDSTRING, 0, (LPARAM)szPrinterName ); if( iNew != CB_ERR ) { SendMessage( hCtrl, CB_SETCURSEL, iNew, 0L ); _strPrinterName = szPrinterName; }
//
// reset the dropped width if necessary
//
WiaUiUtil::ModifyComboBoxDropWidth( hCtrl ); _ValidateControls(); _HandleSelectPrinter(); } } }
}
/*****************************************************************************
CPrintOptionsPage::OnInitDialog
Handle initializing the wizard page...
*****************************************************************************/
LRESULT CPrintOptionsPage::_OnInitDialog() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_OnInitDialog()")));
HWND hCtrl; TCHAR szPrinterName[ MAX_PATH ]; PPRINTER_INFO_2 pPrinterInfo = NULL; DWORD dwCountPrinters; DWORD i; DWORD dwPrinterNameLen;
hCtrl = GetDlgItem( _hDlg, IDC_CHOOSE_PRINTER ); if( !hCtrl ) { return FALSE; }
pPrinterInfo = (PPRINTER_INFO_2) EnumPrintersWrap( NULL, 2, &dwCountPrinters, PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS );
if( pPrinterInfo ) { for( i = 0; i < dwCountPrinters; i++) { #ifdef FILTER_OUT_FAX_PRINTER
if( !IsFaxPrinter( NULL, &pPrinterInfo[i] ) ) { SendMessage( hCtrl, CB_ADDSTRING, 0, (LPARAM)pPrinterInfo[i].pPrinterName ); } #else
SendMessage( hCtrl, CB_ADDSTRING, 0, (LPARAM)pPrinterInfo[i].pPrinterName ); #endif
}
//
// select the default printer if possible
//
szPrinterName[0] = '\0'; dwPrinterNameLen = MAX_PATH;
//
// if fax printer is default printer, we'll select the first printer in the list
//
SendMessage( hCtrl, CB_SETCURSEL, 0, 0L ); if( GetDefaultPrinter( (LPTSTR)szPrinterName, &dwPrinterNameLen ) ) { SendMessage( hCtrl, CB_SELECTSTRING, -1, (LPARAM)szPrinterName ); }
delete [] pPrinterInfo; } else { WIA_ERROR((TEXT("Can't enumerate printer info!"))); }
WiaUiUtil::ModifyComboBoxDropWidth( hCtrl ); _HandleSelectPrinter();
return TRUE; }
/*****************************************************************************
CPrintOptionsPage::OnCommand
Handle WM_COMMAND for this dlg page
*****************************************************************************/
LRESULT CPrintOptionsPage::_OnCommand( WPARAM wParam, LPARAM lParam ) { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_OnCommand()")));
switch (LOWORD(wParam)) { case IDC_PRINTER_PREFERENCES: { _HandlePrinterPreferences(); break; }
case IDC_INSTALL_PRINTER: { _HandleInstallPrinter(); break; }
case IDC_CHOOSE_PRINTER: { if( HIWORD(wParam) == CBN_SELCHANGE ) { //
// change the combobox content of the media type
//
_HandleSelectPrinter(); } break; }
}
return 0; }
/*****************************************************************************
CPrintOptions::_OnKillActive
Save settings into the wizard info blob when the page changes away from us...
*****************************************************************************/
VOID CPrintOptionsPage::_OnKillActive() { WIA_PUSH_FUNCTION_MASK((TRACE_PAGE_PRINT_OPT, TEXT("CPrintOptionsPage::_OnKillActive()")));
//
// set the printer to use for later retrieval
//
if (_pWizInfo) { _pWizInfo->SetPrinterToUse( _strPrinterName.String() ); } }
/*****************************************************************************
CPrintOptions::_OnNotify
Handles WM_NOTIFY for this page...
*****************************************************************************/
LRESULT CPrintOptionsPage::_OnNotify( WPARAM wParam, LPARAM lParam ) { WIA_PUSH_FUNCTION_MASK((TRACE_DLGPROC, TEXT("CPrintOptionsPage::_OnNotify()")));
LONG_PTR lpRes = 0;
LPNMHDR pnmh = (LPNMHDR)lParam; switch (pnmh->code) { case PSN_SETACTIVE: WIA_TRACE((TEXT("got PSN_SETACTIVE"))); PropSheet_SetWizButtons( GetParent(_hDlg), PSWIZB_BACK | PSWIZB_NEXT );
//
// disable the Next button if the printer list is empty
//
_ValidateControls(); lpRes = 0; break;
case PSN_WIZNEXT: WIA_TRACE((TEXT("CPrintOptionsPage: got PSN_WIZNEXT"))); lpRes = IDD_SELECT_TEMPLATE; break;
case PSN_WIZBACK: WIA_TRACE((TEXT("CPrintOptionsPage: got PSN_WIZBACK"))); if (_pWizInfo && (_pWizInfo->CountOfPhotos(FALSE)==1)) { lpRes = IDD_START_PAGE; } else { lpRes = IDD_PICTURE_SELECTION; } break;
case PSN_KILLACTIVE: WIA_TRACE((TEXT("CPrintOptionsPage: got PSN_KILLACTIVE"))); _OnKillActive(); break;
case PSN_QUERYCANCEL: WIA_TRACE((TEXT("CPrintOptionsPage: got PSN_QUERYCANCEL"))); if (_pWizInfo) { lpRes = _pWizInfo->UserPressedCancel(); } break;
}
SetWindowLongPtr( _hDlg, DWLP_MSGRESULT, lpRes );
return TRUE;
}
/*****************************************************************************
CPrintOptionsPage::DoHandleMessage
Hanlder for messages sent to this page...
*****************************************************************************/
INT_PTR CPrintOptionsPage::DoHandleMessage( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { HWND hCtrl; TCHAR szPrinterName[ MAX_PATH ];
WIA_PUSH_FUNCTION_MASK((TRACE_DLGPROC, TEXT("CPrintOptionsPage::DoHandleMessage( uMsg = 0x%x, wParam = 0x%x, lParam = 0x%x )"),uMsg,wParam,lParam));
switch ( uMsg ) { case WM_INITDIALOG: _hDlg = hDlg; return _OnInitDialog();
case WM_COMMAND: return _OnCommand(wParam, lParam);
case WM_NOTIFY: return _OnNotify(wParam, lParam); }
return FALSE; }
|