|
|
/*****************************************************************************
* * $Workfile: AddDone.cpp $ * * Copyright (C) 1997 Hewlett-Packard Company. * Copyright (c) 1997 Microsoft Corporation. * All rights reserved. * * 11311 Chinden Blvd. * Boise, Idaho 83714 * *****************************************************************************/
/*
* Author: Becky Jacobsen */
#include "precomp.h"
#include "UIMgr.h"
#include "AddDone.h"
#include "Resource.h"
#include "TCPMonUI.h"
//
// FUNCTION: CSummaryDlg constructor
//
// PURPOSE: initialize a CSummaryDlg class
//
CSummaryDlg::CSummaryDlg() { } // constructor
//
// FUNCTION: CSummaryDlg destructor
//
// PURPOSE: deinitialize a CSummaryDlg class
//
CSummaryDlg::~CSummaryDlg() { } // destructor
//
// FUNCTION: SummaryDialog(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: To process messages from the summary dialog for adding a port.
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_COMMAND - handles button presses and text changes in edit controls.
//
//
INT_PTR CALLBACK SummaryDialog( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { CSummaryDlg *wndDlg = NULL;
wndDlg = (CSummaryDlg *)GetWindowLongPtr(hDlg, GWLP_USERDATA);
switch (message) { case WM_INITDIALOG: wndDlg = new CSummaryDlg; if( wndDlg == NULL ) return FALSE;
//
// If the function succeeds, the return value is the previous value of the specified offset.
//
// If the function fails, the return value is zero. To get extended error
// information, call GetLastError.
//
// If the previous value is zero and the function succeeds, the return value is zero,
// but the function does not clear the last error information. To determine success or failure,
// clear the last error information by calling SetLastError(0), then call SetWindowLongPtr.
// Function failure will be indicated by a return value of zero and a GetLastError result that is nonzero.
//
SetLastError (0); if (!SetWindowLongPtr(hDlg, GWLP_USERDATA, (UINT_PTR)wndDlg) && GetLastError()) { delete wndDlg; return FALSE; } else return wndDlg->OnInitDialog(hDlg, wParam, lParam); break;
case WM_NOTIFY: return wndDlg->OnNotify(hDlg, wParam, lParam); break;
case WM_DESTROY: if (wndDlg) delete wndDlg; break;
default: return FALSE; } return TRUE;
} // AddPortDialog
//
// FUNCTION: OnInitDialog(HWND hDlg)
//
// PURPOSE: Initialize the dialog.
//
BOOL CSummaryDlg::OnInitDialog(HWND hDlg, WPARAM, LPARAM lParam) { m_pParams = (ADD_PARAM_PACKAGE *) ((PROPSHEETPAGE *) lParam)->lParam;
FillTextFields(hDlg);
m_pParams->UIManager->SetControlFont(hDlg, IDC_TITLE);
return TRUE;
} // OnInitDialog
//
// Function: FillTextFields()
//
// Purpose: To load strings and set the text for all the output fields
// on the Summary page.
//
void CSummaryDlg::FillTextFields(HWND hDlg) { TCHAR ptcsYesNo[MAX_YESNO_SIZE] = NULLSTR; TCHAR ptcsProtocolAndPortNum[MAX_PROTOCOL_AND_PORTNUM_SIZE] = NULLSTR;
// Fill in the protocol field
TCHAR ptcsProtocol[MAX_PROTOCOL_AND_PORTNUM_SIZE] = NULLSTR; TCHAR ptcsPort[MAX_PROTOCOL_AND_PORTNUM_SIZE] = NULLSTR;
if(m_pParams->pData->dwProtocol == PROTOCOL_RAWTCP_TYPE) { LoadString(g_hInstance, IDS_STRING_RAW, ptcsProtocol, MAX_PROTOCOL_AND_PORTNUM_SIZE); LoadString(g_hInstance, IDS_STRING_PORT, ptcsPort, MAX_PROTOCOL_AND_PORTNUM_SIZE); StringCchPrintf (ptcsProtocolAndPortNum, COUNTOF (ptcsProtocolAndPortNum), TEXT("%s, %s %d"), ptcsProtocol, ptcsPort, m_pParams->pData->dwPortNumber); } else { if(m_pParams->pData->dwProtocol == PROTOCOL_LPR_TYPE) { LoadString(g_hInstance, IDS_STRING_LPR, ptcsProtocol, MAX_PROTOCOL_AND_PORTNUM_SIZE); StringCchPrintf (ptcsProtocolAndPortNum, COUNTOF (ptcsProtocolAndPortNum), TEXT("%s, %s"), ptcsProtocol, m_pParams->pData->sztQueue); } } SetWindowText(GetDlgItem(hDlg, IDC_EDIT_PROTOCOL_AND_PORTNUM), ptcsProtocolAndPortNum);
// Fill in the SNMP Field
if(m_pParams->pData->dwSNMPEnabled != FALSE) { LoadString(g_hInstance, IDS_STRING_YES, ptcsYesNo, MAX_YESNO_SIZE); } else { LoadString(g_hInstance, IDS_STRING_NO, ptcsYesNo, MAX_YESNO_SIZE); } SetWindowText(GetDlgItem(hDlg, IDC_EDIT_SNMP_YESNO), ptcsYesNo);
// Fill in the Address field:
SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ADDRESS), m_pParams->pData->sztHostAddress);
// Fill in the PortName field
SetWindowText(GetDlgItem(hDlg, IDC_EDIT_PORTNAME), m_pParams->pData->sztPortName);
// Fill in the Detected type
SetWindowText(GetDlgItem( hDlg, IDC_EDIT_SYSTEMID), m_pParams->sztPortDesc);
} // FillTextFields
//
// FUNCTION: OnNotify()
//
// PURPOSE: Process WM_NOTIFY message
//
BOOL CSummaryDlg::OnNotify(HWND hDlg, WPARAM wParam, LPARAM lParam) { switch (((NMHDR FAR *) lParam)->code) { case PSN_KILLACTIVE: SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); break;
case PSN_RESET: // reset to the original values
#ifdef _WIN64
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); #else
SetWindowLong(hDlg, DWL_MSGRESULT, FALSE); #endif
break;
case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_FINISH); FillTextFields(hDlg); PostMessage(GetDlgItem(hDlg, IDC_EDIT_SNMP_YESNO), EM_SETSEL,0,0); return FALSE; break;
case PSN_WIZBACK: // To jump to a page other than the previous or next one,
// an application should set DWL_MSGRESULT to the identifier
// of the dialog box to be displayed.
if(m_pParams->dwDeviceType == SUCCESS_DEVICE_SINGLE_PORT) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_ADDPORT); } else if (m_pParams->bMultiPort == FALSE ) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_MORE_INFO); }
break;
case PSN_WIZFINISH: OnFinish(); break;
case PSN_QUERYCANCEL: m_pParams->dwLastError = ERROR_CANCELLED; return FALSE; break;
default: return FALSE;
}
return TRUE;
} // OnNotify
//
// FUNCTION: OnFinish()
//
// PURPOSE: Create the Port
//
BOOL CSummaryDlg::OnFinish() { HCURSOR hOldCursor = NULL; HCURSOR hNewCursor = NULL;
hNewCursor = LoadCursor(NULL, IDC_WAIT); if ( hNewCursor ) {
hOldCursor = SetCursor(hNewCursor); }
if ( m_pParams->hXcvPrinter != NULL ) {
RemoteTellPortMonToCreateThePort(); } else { LocalTellPortMonToCreateThePort(); }
//
// Make sure the port name is returned to the calling module.
//
lstrcpyn(m_pParams->sztPortName, m_pParams->pData->sztPortName, MAX_PORTNAME_LEN);
//
// Change the cursor back from an hour glass.
//
if ( hNewCursor ) {
SetCursor(hOldCursor); }
return TRUE;
} // OnFinish
//
// FUNCTION: RemoteTellPortMonToCreateThePort
//
// PURPOSE: Loads winspool.dll and calls XcvData
//
DWORD CSummaryDlg::RemoteTellPortMonToCreateThePort() { DWORD dwReturn = NO_ERROR; HINSTANCE hLib = NULL; XCVDATAPARAM pfnXcvData = NULL; HCURSOR hOldCursor = NULL; HCURSOR hNewCursor = NULL;
hNewCursor = LoadCursor(NULL, IDC_WAIT); if ( hNewCursor ) {
hOldCursor = SetCursor(hNewCursor); }
//
// load & assign the function pointer
//
hLib = ::LoadLibrary(TEXT("WinSpool.drv")); if( hLib != NULL ) {
//
// initialize the library
//
pfnXcvData = (XCVDATAPARAM)::GetProcAddress(hLib, "XcvDataW"); if ( pfnXcvData != NULL ) {
DWORD dwOutputNeeded = 0; DWORD dwStatus = NO_ERROR; //
// here's the call we've all been waiting for:
//
DWORD dwRet = (*pfnXcvData)(m_pParams->hXcvPrinter, (PCWSTR)TEXT("AddPort"), (PBYTE)(m_pParams->pData), m_pParams->pData->cbSize, NULL, 0, &dwOutputNeeded, &dwStatus);
if ( !dwRet ) {
dwReturn = GetLastError(); DisplayErrorMessage(NULL, dwReturn); } else {
if ( dwStatus != NO_ERROR ) DisplayErrorMessage(NULL, dwStatus); } } else {
dwReturn = ERROR_DLL_NOT_FOUND; }
} else {
dwReturn = ERROR_DLL_NOT_FOUND; }
//
// --- Cleanup ---
//
if ( hLib ) FreeLibrary(hLib);
if ( hNewCursor ) SetCursor(hOldCursor);
return(dwReturn);
} // RemoteTellPortMonToCreateThePort
//
// FUNCTION: TellPortMonToCreateThePort
//
// Purpose: To load the port monitor dll and call AddPortUIEx
//
// Return Value:
//
DWORD CSummaryDlg::LocalTellPortMonToCreateThePort() { DWORD dwReturn = NO_ERROR; UIEXPARAM pfnAddPortUIEx = NULL; HCURSOR hOldCursor = NULL; HCURSOR hNewCursor = NULL;
hNewCursor = LoadCursor(NULL, IDC_WAIT); if ( hNewCursor ) hOldCursor = SetCursor(hNewCursor);
//
// load & assign the function pointer
//
if ( g_hPortMonLib != NULL) {
//
// initialize the library
//
pfnAddPortUIEx = (UIEXPARAM)::GetProcAddress(g_hPortMonLib, "AddPortUIEx"); if ( pfnAddPortUIEx != NULL ) {
//
// here's the call we've all been waiting for:
//
BOOL bReturn = (*pfnAddPortUIEx)(m_pParams->pData); if(bReturn == FALSE) {
dwReturn = GetLastError(); DisplayErrorMessage(NULL, dwReturn); } } else {
dwReturn = ERROR_DLL_NOT_FOUND; } } else {
dwReturn = ERROR_DLL_NOT_FOUND; }
//
// Cleanup
//
if ( hNewCursor ) SetCursor(hOldCursor);
return dwReturn;
} // LocalTellPortMonToCreateThePort
|