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.
574 lines
13 KiB
574 lines
13 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 2000-2002 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// SelNodePage.cpp
|
|
//
|
|
// Maintained By:
|
|
// David Potter (DavidP) 31-JAN-2001
|
|
// Geoffrey Pease (GPease) 12-MAY-2000
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Pch.h"
|
|
#include "SelNodePage.h"
|
|
#include "WizardUtils.h"
|
|
#include "AdvancedDlg.h"
|
|
|
|
DEFINE_THISCLASS("CSelNodePage");
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::CSelNodePage
|
|
//
|
|
// Description:
|
|
// Constructor.
|
|
//
|
|
// Arguments:
|
|
// pccwIn - CClusCfgWizard
|
|
//
|
|
// Return Values:
|
|
// None.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CSelNodePage::CSelNodePage(
|
|
CClusCfgWizard * pccwIn
|
|
)
|
|
: m_hwnd( NULL )
|
|
, m_pccw( pccwIn )
|
|
{
|
|
TraceFunc( "" );
|
|
Assert( m_pccw != NULL );
|
|
m_pccw->AddRef();
|
|
|
|
TraceFuncExit();
|
|
|
|
} //*** CSelNodePage::CSelNodePage
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::~CSelNodePage
|
|
//
|
|
// Description:
|
|
// Destructor.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Values:
|
|
// None.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CSelNodePage::~CSelNodePage( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
if ( m_pccw != NULL )
|
|
{
|
|
m_pccw->Release();
|
|
}
|
|
|
|
TraceFuncExit();
|
|
|
|
} //*** CSelNodePage::~CSelNodePage
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnInitDialog
|
|
//
|
|
// Description:
|
|
// Handle the WM_INITDIALOG window message.
|
|
//
|
|
// Arguments:
|
|
// hDlgIn
|
|
//
|
|
// Return Values:
|
|
// FALSE - Didn't set the focus.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnInitDialog(
|
|
HWND hDlgIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = FALSE; // Didn't set the focus.
|
|
|
|
//
|
|
// (jfranco, bug #462673) Limit node name length to ADJUSTED_DNS_MAX_NAME_LENGTH.
|
|
// According to MSDN, EM_(SET)LIMITTEXT does not return a value, so ignore what SendDlgItemMessage returns
|
|
//
|
|
|
|
SendDlgItemMessage( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, EM_SETLIMITTEXT, ADJUSTED_DNS_MAX_NAME_LENGTH, 0 );
|
|
|
|
//
|
|
// Call the base class function.
|
|
// This must be called before any other base class methods are called.
|
|
//
|
|
|
|
CSelNodesPageCommon::OnInitDialog( hDlgIn, m_pccw );
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CSelNodePage::OnInitDialog
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnCommand
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// idNotificationIn
|
|
// idControlIn
|
|
// hwndSenderIn
|
|
//
|
|
// Return Values:
|
|
// TRUE
|
|
// FALSE
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnCommand(
|
|
UINT idNotificationIn,
|
|
UINT idControlIn,
|
|
HWND hwndSenderIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = FALSE;
|
|
|
|
switch ( idControlIn )
|
|
{
|
|
case IDC_SELNODE_E_COMPUTERNAME:
|
|
if ( idNotificationIn == EN_CHANGE )
|
|
{
|
|
THR( HrUpdateWizardButtons() );
|
|
lr = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_SELNODE_PB_BROWSE:
|
|
if ( idNotificationIn == BN_CLICKED )
|
|
{
|
|
//
|
|
// TODO: 26-JUN-2000 GalenB
|
|
//
|
|
// Need to set lr properly.
|
|
//
|
|
THR( HrBrowse( false /* fMultipleNodesIn */ ) );
|
|
lr = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_SELNODE_PB_ADVANCED:
|
|
if ( idNotificationIn == BN_CLICKED )
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = STHR( CAdvancedDlg::S_HrDisplayModalDialog( m_hwnd, m_pccw ) );
|
|
if ( hr == S_OK )
|
|
{
|
|
OnNotifySetActive();
|
|
} // if:
|
|
|
|
lr = TRUE;
|
|
} // if:
|
|
break;
|
|
|
|
} // switch: idControlIn
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CSelNodePage::OnCommand
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::HrUpdateWizardButtons
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Values:
|
|
// S_OK
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
HRESULT
|
|
CSelNodePage::HrUpdateWizardButtons( void )
|
|
{
|
|
|
|
TraceFunc( "" );
|
|
|
|
HRESULT hr = S_OK;
|
|
BSTR bstrComputerName = NULL;
|
|
DWORD mEnabledButtons = PSWIZB_BACK;
|
|
|
|
hr = STHR( HrGetTrimmedText( GetDlgItem( m_hwnd, IDC_SELNODE_E_COMPUTERNAME ), &bstrComputerName ) );
|
|
|
|
if ( hr == S_OK )
|
|
{
|
|
mEnabledButtons |= PSWIZB_NEXT;
|
|
}
|
|
|
|
PropSheet_SetWizButtons( GetParent( m_hwnd ), mEnabledButtons );
|
|
|
|
TraceSysFreeString( bstrComputerName );
|
|
|
|
HRETURN( hr );
|
|
} //*** CSelNodePage::HrUpdateWizardButtons
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnNotifySetActive
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Values:
|
|
// TRUE
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnNotifySetActive( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = TRUE;
|
|
|
|
STHR( HrUpdateWizardButtons() );
|
|
|
|
//
|
|
// TODO: gpease 23-MAY-2000
|
|
// Figure out: If the user clicks back and changes the computer
|
|
// name, how do we update the middle tier?
|
|
//
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CSelNodePage::OnNotifySetActive
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnNotifyQueryCancel
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Values:
|
|
// TRUE
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnNotifyQueryCancel( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = TRUE;
|
|
|
|
int iRet;
|
|
|
|
iRet = MessageBoxFromStrings( m_hwnd,
|
|
IDS_QUERY_CANCEL_TITLE,
|
|
IDS_QUERY_CANCEL_TEXT,
|
|
MB_YESNO
|
|
);
|
|
|
|
if ( iRet == IDNO )
|
|
{
|
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 );
|
|
}
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CSelNodePage::OnNotifyQueryCancel
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnNotifyWizNext
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Values:
|
|
// TRUE
|
|
// Other LRESULT values.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnNotifyWizNext( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
HRESULT hr = S_OK;
|
|
int idcFocus = 0;
|
|
BSTR bstrComputerName = NULL;
|
|
LRESULT lr = TRUE;
|
|
|
|
// Get machine name from edit control.
|
|
hr = THR( HrGetTrimmedText( GetDlgItem( m_hwnd, IDC_SELNODE_E_COMPUTERNAME ), &bstrComputerName ) );
|
|
if ( hr != S_OK )
|
|
{
|
|
goto Error;
|
|
}
|
|
|
|
// Check the machine name.
|
|
hr = THR( HrValidateFQNPrefix( bstrComputerName ) );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
THR( HrShowInvalidLabelPrompt( m_hwnd, bstrComputerName, hr ) );
|
|
idcFocus = IDC_SELNODE_E_COMPUTERNAME;
|
|
goto Error;
|
|
}
|
|
|
|
//
|
|
// Free old list (if any)
|
|
//
|
|
hr = THR( m_pccw->ClearComputerList() );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Error;
|
|
}
|
|
|
|
// Make this machine the sole entry in the list.
|
|
hr = THR( m_pccw->HrAddNode( bstrComputerName, true ) );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Error;
|
|
}
|
|
|
|
goto Cleanup;
|
|
|
|
Cleanup:
|
|
|
|
TraceSysFreeString( bstrComputerName );
|
|
|
|
RETURN( lr );
|
|
|
|
Error:
|
|
if ( idcFocus != 0 )
|
|
{
|
|
SetFocus( GetDlgItem( m_hwnd, idcFocus ) );
|
|
}
|
|
// Don't go to the next page.
|
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 );
|
|
goto Cleanup;
|
|
|
|
} //*** CSelNodePage::OnNotifyWizNext()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodePage::OnNotify
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// idCtrlIn
|
|
// pnmhdrIn
|
|
//
|
|
// Return Values:
|
|
// TRUE
|
|
// Other LRESULT values
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CSelNodePage::OnNotify(
|
|
WPARAM idCtrlIn,
|
|
LPNMHDR pnmhdrIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = TRUE;
|
|
|
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, 0 );
|
|
|
|
switch( pnmhdrIn->code )
|
|
{
|
|
case PSN_SETACTIVE:
|
|
lr = OnNotifySetActive();
|
|
break;
|
|
|
|
case PSN_WIZNEXT:
|
|
lr = OnNotifyWizNext();
|
|
break;
|
|
|
|
case PSN_QUERYCANCEL:
|
|
lr = OnNotifyQueryCancel();
|
|
break;
|
|
} // switch: notify code
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CSelNodePage::OnNotify
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// static
|
|
// CSelNodePage::S_DlgProc
|
|
//
|
|
// Description:
|
|
// Dialog proc for this page.
|
|
//
|
|
// Arguments:
|
|
// hDlgIn
|
|
// MsgIn
|
|
// wParam
|
|
// lParam
|
|
//
|
|
// Return Values:
|
|
// FALSE
|
|
// Other LRESULT values
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
INT_PTR
|
|
CALLBACK
|
|
CSelNodePage::S_DlgProc(
|
|
HWND hDlgIn,
|
|
UINT MsgIn,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
// Don't do TraceFunc because every mouse movement
|
|
// will cause this function to be called.
|
|
|
|
WndMsg( hDlgIn, MsgIn, wParam, lParam );
|
|
|
|
LRESULT lr = FALSE;
|
|
CSelNodePage * pPage = reinterpret_cast< CSelNodePage * >( GetWindowLongPtr( hDlgIn, GWLP_USERDATA ) );
|
|
|
|
if ( MsgIn == WM_INITDIALOG )
|
|
{
|
|
Assert( lParam != NULL );
|
|
|
|
PROPSHEETPAGE * ppage = reinterpret_cast< PROPSHEETPAGE * >( lParam );
|
|
SetWindowLongPtr( hDlgIn, GWLP_USERDATA, (LPARAM) ppage->lParam );
|
|
pPage = reinterpret_cast< CSelNodePage * >( ppage->lParam );
|
|
pPage->m_hwnd = hDlgIn;
|
|
}
|
|
|
|
if ( pPage != NULL )
|
|
{
|
|
Assert( hDlgIn == pPage->m_hwnd );
|
|
|
|
switch( MsgIn )
|
|
{
|
|
case WM_INITDIALOG:
|
|
lr = pPage->OnInitDialog( hDlgIn );
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
lr = pPage->OnNotify( wParam, reinterpret_cast< LPNMHDR >( lParam ) );
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
lr= pPage->OnCommand( HIWORD( wParam ), LOWORD( wParam ), (HWND) lParam );
|
|
break;
|
|
|
|
// no default clause needed
|
|
} // switch: message
|
|
} // if: there is a page associated with the window
|
|
|
|
return lr;
|
|
|
|
} //*** CSelNodePage::S_DlgProc
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodesPage::OnProcessedNodeWithBadDomain
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// pwcszNodeNameIn
|
|
//
|
|
// Return Values:
|
|
// None.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
CSelNodePage::OnProcessedNodeWithBadDomain( PCWSTR pwcszNodeNameIn )
|
|
{
|
|
SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn );
|
|
|
|
} //*** CSelNodePage::OnProcessedNodeWithBadDomain
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodesPage::OnProcessedValidNode
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// pwcszNodeNameIn
|
|
//
|
|
// Return Values:
|
|
// None.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
CSelNodePage::OnProcessedValidNode( PCWSTR pwcszNodeNameIn )
|
|
{
|
|
SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn );
|
|
|
|
} //*** CSelNodePage::OnProcessedValidNode
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CSelNodesPage::HrSetDefaultNode
|
|
//
|
|
// Description:
|
|
//
|
|
// Arguments:
|
|
// pwcszNodeNameIn
|
|
//
|
|
// Return Values:
|
|
// S_OK.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
HRESULT
|
|
CSelNodePage::HrSetDefaultNode( PCWSTR pwcszNodeNameIn )
|
|
{
|
|
SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn );
|
|
return S_OK;
|
|
|
|
} //*** CSelNodePage::HrSetDefaultNode
|