Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

528 lines
15 KiB

/*****************************************************************************
*
* $Workfile: AddMInfo.cpp $
*
* Copyright (C) 1997 Hewlett-Packard Company.
* Copyright (c) 1997 Microsoft Corporation.
* All rights reserved.
*
* 11311 Chinden Blvd.
* Boise, Idaho 83714
*
*****************************************************************************/
#include "precomp.h"
#include "UIMgr.h"
#include "DevPort.h"
#include "AddMInfo.h"
#include "Resource.h"
#include "MibABC.h"
#include "TcpMonUI.h"
//
// FUNCTION: CMoreInfoDlg constructor
//
// PURPOSE: initialize a CMoreInfoDlg class
//
CMoreInfoDlg::CMoreInfoDlg() : m_DPList( )
{
memset(&m_PortDataStandard, 0, sizeof(m_PortDataStandard));
memset(&m_PortDataCustom, 0, sizeof(m_PortDataCustom));
lstrcpyn(m_szCurrentSelection, DEFAULT_COMBO_SELECTION, MAX_SECTION_NAME);
} // constructor
//
// FUNCTION: CMoreInfoDlg destructor
//
// PURPOSE: deinitialize a CMoreInfoDlg class
//
CMoreInfoDlg::~CMoreInfoDlg()
{
} // destructor
//
// FUNCTION: MoreInfoDialog(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 MoreInfoDialog(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
CMoreInfoDlg *wndDlg = NULL;
wndDlg = (CMoreInfoDlg *)GetWindowLongPtr(hDlg, GWLP_USERDATA);
switch (message) {
case WM_INITDIALOG:
wndDlg = new CMoreInfoDlg;
if( wndDlg == NULL )
return( FALSE );
SetWindowLongPtr(hDlg, GWLP_USERDATA, (UINT_PTR)wndDlg);
return wndDlg->OnInitDialog(hDlg, wParam, lParam);
break;
case WM_COMMAND:
return wndDlg->OnCommand(hDlg, wParam, lParam);
break;
case WM_NOTIFY:
return wndDlg->OnNotify(hDlg, wParam, lParam);
break;
case WM_DESTROY:
delete wndDlg;
break;
default:
return FALSE;
}
return TRUE;
} // AddPortDialog
//
// FUNCTION: OnInitDialog(HWND hDlg)
//
// PURPOSE: Initialize the dialog.
//
BOOL CMoreInfoDlg::OnInitDialog(HWND hDlg, WPARAM, LPARAM lParam)
{
m_pParams = (ADD_PARAM_PACKAGE *) ((PROPSHEETPAGE *) lParam)->lParam;
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_STANDARD);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), FALSE);
return TRUE;
} // OnInitDialog
//
// FUNCTION: OnCommand()
//
// PURPOSE: Process WM_COMMAND message
//
BOOL CMoreInfoDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
switch(HIWORD(wParam)) {
case BN_CLICKED:
return OnButtonClicked(hDlg, wParam, lParam);
break;
/*
case LBN_SELCHANGE:
return OnSelChange(hDlg, wParam, lParam);
break;
*/
default:
return FALSE;
}
return TRUE;
} // OnCommand
#if 0
//
// FUNCTION: OnSelChange()
//
// PURPOSE: Process WM_COMMAND's LBN_SELCHANGE message
//
BOOL CMoreInfoDlg::OnSelChange(HWND hDlg,
WPARAM wParam,
LPARAM lParam)
{
// The selection in the combo box changed.
HWND hwndComboBox = NULL;
hwndComboBox = (HWND) lParam; // handle of list box
GetPrinterData(hwndComboBox, m_pParams->pData->sztHostAddress);
return TRUE;
} // OnSelChange
#endif
//
// FUNCTION: GetPrinterData(HWND hwndControl, BOOL *Unknown)
//
// PURPOSE: Gets the socket number of the selected item.
//
// Arguments: hwndControl is the handle of the combo box.
//
// Return Value: Returns the socket number associated with the selected item
//
void CMoreInfoDlg::GetPrinterData(HWND hwndControl,
LPCTSTR pszAddress
)
{
LRESULT iSelectedIndex = 0;
CDevicePort *pPortInfo = NULL;
iSelectedIndex = SendMessage(hwndControl,
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
pPortInfo = (CDevicePort *) SendMessage(hwndControl,
CB_GETITEMDATA,
(WPARAM)iSelectedIndex,
(LPARAM)0);
if ( (DWORD_PTR)pPortInfo != CB_ERR) {
pPortInfo->ReadPortInfo(pszAddress, &m_PortDataStandard, m_pParams->bBypassNetProbe);
lstrcpyn( m_szCurrentSelection, pPortInfo->GetName(), MAX_SECTION_NAME);
m_pParams->bMultiPort = ( pPortInfo->GetPortIndex() == 0);
lstrcpyn(m_pParams->sztSectionName,pPortInfo->GetPortKeyName(), MAX_SECTION_NAME);
} else {
//
// DSN Fill out the default structure
//
m_PortDataStandard.dwPortNumber = DEFAULT_PORT_NUMBER;
lstrcpyn(m_PortDataStandard.sztSNMPCommunity,
DEFAULT_SNMP_COMUNITY,
MAX_SNMP_COMMUNITY_STR_LEN);
m_PortDataStandard.dwSNMPDevIndex = 1;
}
} // GetPrinterData
//
// FUNCTION: OnNotify()
//
// PURPOSE: Process WM_NOTIFY message
//
BOOL CMoreInfoDlg::OnNotify(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
switch (((NMHDR FAR *) lParam)->code) {
case PSN_KILLACTIVE:
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
return 1;
case PSN_RESET:
//
// reset to the original values
//
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
break;
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT | PSWIZB_BACK);
OnSetActive(hDlg);
break;
case PSN_WIZBACK:
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_ADDPORT);
memcpy(m_pParams->pData, &m_PortDataStandard, sizeof(PORT_DATA_1));
break;
case PSN_WIZNEXT:
//
// the Next button was pressed
//
if( IsDlgButtonChecked(hDlg, IDC_RADIO_STANDARD) == BST_CHECKED ) {
HWND hList = NULL;
HCURSOR hNewCursor = NULL;
HCURSOR hOldCursor = NULL;
if ( hNewCursor = LoadCursor(NULL, IDC_WAIT) )
hOldCursor = SetCursor(hNewCursor);
hList = GetDlgItem(hDlg, IDC_COMBO_DEVICES);
GetPrinterData(hList, m_pParams->pData->sztHostAddress);
if ( m_pParams->bMultiPort == FALSE ) {
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_SUMMARY);
}
memcpy(m_pParams->pData,
&m_PortDataStandard,
sizeof(PORT_DATA_1));
lstrcpyn(m_pParams->sztPortDesc,
m_szCurrentSelection,
SIZEOF_IN_CHAR(m_pParams->sztPortDesc));
if ( hNewCursor )
SetCursor(hOldCursor);
} else {
//
// if(IsDlgButtonChecked(hDlg, IDC_RADIO_CUSTOM) == BST_CHECKED)
//
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_SUMMARY);
memcpy(m_pParams->pData, &m_PortDataCustom, sizeof(PORT_DATA_1));
m_pParams->bMultiPort = FALSE;
*m_pParams->sztPortDesc = '\0';
}
break;
case PSN_QUERYCANCEL:
m_pParams->dwLastError = ERROR_CANCELLED;
return FALSE;
break;
default:
return FALSE;
}
return TRUE;
} // OnCommand
HRESULT
DynamicLoadString (
IN HINSTANCE hInst,
IN UINT uID,
IN UINT cchInitialCount,
OUT LPWSTR* ppszString
)
/*++
This function allocates memory using 'new' operator and loads string using LoadString call.
Caller is responsible for deleting the allocated memory.
The buffer space is insufficient if there is no extra character left after terminating char.
In this case, it releases the memory, allocates new bigger buffer and calls LoadString again.
--*/
{
HRESULT hr = S_OK;
UINT cchCount = cchInitialCount + 1;
for (;;)
{
LPWSTR pszString = new WCHAR [cchCount];
if (pszString == NULL)
{
hr = E_OUTOFMEMORY;
break;
}
UINT cchLoadStringCount = LoadString (hInst,
uID,
pszString,
cchCount);
if (cchLoadStringCount == 0)
{
//
// String does not exist
//
*pszString = L'\0';
*ppszString = pszString;
hr = S_FALSE;
break;
}
//
// If the buffer is full (string content plus terminating char)
// we need to increase the buffer to be sure the whole string is loaded
//
if (cchLoadStringCount + 1 < cchCount)
{
//
// After terminating char of the copied string must remain at least one empty place
// This is a sign that we have whole string
//
*ppszString = pszString;
hr = S_OK;
break;
}
//
// Increase the size of the buffer and load string again
//
delete [] pszString;
cchCount *= 2;
}
return hr;
}//end DynamicLoadString
//
// FUNCTION: OnSetActive()
//
// PURPOSE: Process PSN_SETACTIVE part of the WM_NOTIFY message
//
void CMoreInfoDlg::OnSetActive(HWND hDlg)
{
WCHAR* pszMoreInfoReason = NULL;
memcpy( &m_PortDataStandard, m_pParams->pData, sizeof(PORT_DATA_1) );
memcpy( &m_PortDataCustom, m_pParams->pData, sizeof(PORT_DATA_1) );
FillComboBox(hDlg);
switch(m_pParams->dwDeviceType) {
case ERROR_DEVICE_NOT_FOUND:
(VOID) DynamicLoadString (g_hInstance,
IDS_STRING_DEV_NOT_FOUND,
MAX_REASON_STRLEN,
&pszMoreInfoReason);
break;
case SUCCESS_DEVICE_UNKNOWN:
(VOID) DynamicLoadString (g_hInstance,
IDS_STRING_UNKNOWN_DEV,
MAX_REASON_STRLEN,
&pszMoreInfoReason);
break;
default:
break;
}
if (pszMoreInfoReason)
{
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_MOREINFO_REASON), pszMoreInfoReason);
}
else
{
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_MOREINFO_REASON), L"");
}
delete [] pszMoreInfoReason;
} // OnSetActive
//
// FUNCTION: OnButtonClicked()
//
// PURPOSE: Process BN_CLICKED message
//
BOOL CMoreInfoDlg::OnButtonClicked(HWND hDlg, WPARAM wParam, LPARAM)
{
int idButton = (int) LOWORD(wParam); // identifier of button
// HWND hwndButton = (HWND) lParam;
switch(idButton)
{
case IDC_BUTTON_SETTINGS:
m_pParams->UIManager->ConfigPortUI(hDlg,
&m_PortDataCustom,
m_pParams->hXcvPrinter,
m_pParams->pszServer,
TRUE);
break;
case IDC_RADIO_STANDARD:
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_STANDARD);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), FALSE);
SetFocus(GetDlgItem(hDlg, IDC_COMBO_DEVICES));
break;
case IDC_RADIO_CUSTOM:
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_CUSTOM);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), TRUE);
SetFocus(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS));
break;
default:
return FALSE;
break;
}
return TRUE;
} // OnButtonClicked
//
// FUNCTION: FillComboBox(HWND hDlg)
//
// PURPOSE: Fills the combo box with values gotten from the ini file.
// The associated item data is used to pair the port number with the
// device types.
//
// Arguments: hDlg is the handle of the dialog box.
//
void CMoreInfoDlg::FillComboBox(HWND hDlg)
{
LRESULT index = 0;
HWND hList = NULL;
CDevicePort *pDP = NULL;
TCHAR sztGenericNetworkCard[MAX_TITLE_LENGTH];
hList = GetDlgItem(hDlg, IDC_COMBO_DEVICES);
// Possible Values in m_pParams->dwDeviceType:
// ERROR_DEVICE_NOT_FOUND
// SUCCESS_DEVICE_MULTI_PORT
// SUCCESS_DEVICE_UNKNOWN
index = SendMessage(hList,
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
if (index == CB_ERR) {
// This is the first time, initiliaze the list
index = SendMessage(hList, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
//
// Initialize the list of variables
//
if(m_pParams->dwDeviceType == ERROR_DEVICE_NOT_FOUND ||
m_pParams->dwDeviceType == SUCCESS_DEVICE_UNKNOWN) {
m_DPList.GetDevicePortsList(NULL);
} else { // SUCCESS_DEVICE_MULTI_PORT
m_DPList.GetDevicePortsList(m_pParams->sztSectionName);
}
for(pDP = m_DPList.GetFirst(); pDP != NULL; pDP = m_DPList.GetNext()) {
index = SendMessage(hList,
CB_ADDSTRING,
(WPARAM)0,
(LPARAM)pDP->GetName());
SendMessage(hList,
CB_SETITEMDATA,
(WPARAM)index,
(LPARAM)pDP);
}
index = SendMessage(hList,
CB_SETCURSEL,
(WPARAM)0,
(LPARAM)0);
if((m_pParams->dwDeviceType == ERROR_DEVICE_NOT_FOUND ||
m_pParams->dwDeviceType == SUCCESS_DEVICE_UNKNOWN) &&
(*m_szCurrentSelection != '\0') ) {
index = SendMessage(hList,
CB_SELECTSTRING,
(WPARAM)-1,
(LPARAM)m_szCurrentSelection);
}
SendMessage(hList, CB_SETCURSEL, (WPARAM)index, (LPARAM)0);
if (LoadString(g_hInstance, IDS_GENERIC_NETWORK_CARD, sztGenericNetworkCard, MAX_TITLE_LENGTH))
SendMessage(hList, CB_SELECTSTRING, 0, (LPARAM)sztGenericNetworkCard);
}
} // FillComboBox