////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1999-2002 Microsoft Corporation // // Module Name: // WelcomePage.cpp // // Maintained By: // Geoffrey Pease (GPease) 12-MAY-2000 // ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // Include Files ////////////////////////////////////////////////////////////////////////////// #include "Pch.h" #include "WelcomePage.h" ////////////////////////////////////////////////////////////////////////////// // Constant Definitions ////////////////////////////////////////////////////////////////////////////// DEFINE_THISCLASS("CWelcomePage"); //*************************************************************************// ///////////////////////////////////////////////////////////////////////////// // CWelcomePage class ///////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::CWelcomePage // // Description: // Constructor // // Arguments: // ecamCreateAddModeIn // Creating cluster or adding nodes to cluster. // // Return Values: // None. // //-- ////////////////////////////////////////////////////////////////////////////// CWelcomePage::CWelcomePage( CClusCfgWizard * pccwIn , ECreateAddMode ecamCreateAddModeIn ) : m_pccw( pccwIn ) { TraceFunc( "" ); // // Cannot Assert that these are in a zero state since this page // is allocated on the stack and not by our zero-initing heap alloc // function... // m_hwnd = NULL; m_hFont = NULL; Assert( m_pccw != NULL ); m_pccw->AddRef(); m_ecamCreateAddMode = ecamCreateAddModeIn; TraceFuncExit(); } //*** CWelcomePage::CWelcomePage ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::~CWelcomePage // // Description: // Destructor // // Arguments: // None. // // Return Values: // None. // //-- ////////////////////////////////////////////////////////////////////////////// CWelcomePage::~CWelcomePage( void ) { TraceFunc( "" ); if ( m_pccw != NULL ) { m_pccw->Release(); } // if: if ( m_hFont != NULL ) { DeleteObject( m_hFont ); } // if: TraceFuncExit(); } //*** CWelcomePage::~CWelcomePage ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::OnInitDialog // // Description: // Process the WM_INIT_DIALOG message. // // Arguments: // None. // // Return Values: // LRESULT TRUE all the time... // //-- ////////////////////////////////////////////////////////////////////////////// LRESULT CWelcomePage::OnInitDialog( void ) { TraceFunc( "" ); LRESULT lr = TRUE; HDC hdc = NULL; HRESULT hr; NONCLIENTMETRICS ncm; LOGFONT LogFont; INT iSize; DWORD dw; BOOL fRet; WCHAR szFontSize[ 3 ]; // shouldn't be bigger than 2 digits!! BSTR bstrRequirement = NULL; BSTR bstrFormattedReq = NULL; BSTR bstrRequirements = NULL; int idxids; int cidsRequirements; UINT * pidsRequirements; static UINT rgidsCreateRequirements[] = { IDS_WELCOME_CREATE_REQ_1 , IDS_WELCOME_CREATE_REQ_2 , IDS_WELCOME_CREATE_REQ_3 , IDS_WELCOME_CREATE_REQ_4 , IDS_WELCOME_CREATE_REQ_5 }; static UINT rgidsAddRequirements[] = { IDS_WELCOME_ADD_REQ_1 , IDS_WELCOME_ADD_REQ_2 }; // // Make the Title static BIG and BOLD. Why the wizard control itself can't // do this is beyond me! // ZeroMemory( &ncm, sizeof( ncm ) ); ZeroMemory( &LogFont, sizeof( LogFont ) ); // // Find out the system default font metrics. // ncm.cbSize = sizeof( ncm ); fRet = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 ); if ( fRet == FALSE ) { TW32( GetLastError() ); goto Cleanup; } // if: // // Copy it. // LogFont = ncm.lfMessageFont; // // Make it BOLD. // LogFont.lfWeight = FW_BOLD; // // Find out what we want it to look like. // dw = LoadString( g_hInstance, IDS_LARGEFONTNAME, LogFont.lfFaceName, ARRAYSIZE( LogFont.lfFaceName ) ); AssertMsg( dw != 0, "String missing!" ); dw = LoadString( g_hInstance, IDS_LARGEFONTSIZE, szFontSize, ARRAYSIZE( szFontSize ) ); AssertMsg( dw != 0, "String missing!" ); iSize = wcstoul( szFontSize, NULL, 10 ); // // Grab the DC. // hdc = GetDC( m_hwnd ); if ( hdc == NULL ) { TW32( GetLastError() ); goto Cleanup; } // if: // // Use the magic equation.... // LogFont.lfHeight = 0 - ( GetDeviceCaps( hdc, LOGPIXELSY ) * iSize / 72 ); // // Create the font. // m_hFont = CreateFontIndirect( &LogFont ); if ( m_hFont == NULL ) { TW32( GetLastError() ); goto Cleanup; } // if: // // Apply the font. // SetWindowFont( GetDlgItem( m_hwnd, IDC_WELCOME_S_TITLE ), m_hFont, TRUE ); // // Load the requirement text. // if ( m_ecamCreateAddMode == camCREATING ) { pidsRequirements = rgidsCreateRequirements; cidsRequirements = ARRAYSIZE( rgidsCreateRequirements ); } // if: creating a new cluster else { pidsRequirements = rgidsAddRequirements; cidsRequirements = ARRAYSIZE( rgidsAddRequirements ); } // else: adding nodes to an existing cluster for ( idxids = 0 ; idxids < cidsRequirements ; idxids++ ) { hr = HrLoadStringIntoBSTR( g_hInstance, pidsRequirements[ idxids ], &bstrRequirement ); if ( FAILED( hr ) ) { goto Cleanup; } // if: hr = HrFormatStringIntoBSTR( L" - %1!ws!\n", &bstrFormattedReq, bstrRequirement ); if ( FAILED( hr ) ) { goto Cleanup; } // if: hr = HrConcatenateBSTRs( &bstrRequirements, bstrFormattedReq ); if ( FAILED( hr ) ) { goto Cleanup; } // if: TraceSysFreeString( bstrRequirement ); bstrRequirement = NULL; } // for: each requirement string SetDlgItemText( m_hwnd, IDC_WELCOME_S_REQUIREMENTS, bstrRequirements ); Cleanup: if ( hdc != NULL ) { ReleaseDC( m_hwnd, hdc ); } // if: TraceSysFreeString( bstrRequirement ); TraceSysFreeString( bstrFormattedReq ); TraceSysFreeString( bstrRequirements ); RETURN( lr ); } //*** CWelcomePage::OnInitDialog ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::OnNotifyWizNext // // Description: // Process the PSN_WIZNEXT notification message. // // Arguments: // None. // // Return Values: // LRESULT TRUE all the time... // //-- ////////////////////////////////////////////////////////////////////////////// LRESULT CWelcomePage::OnNotifyWizNext( void ) { TraceFunc( "" ); Assert( m_pccw != NULL ); RETURN( (LRESULT) TRUE ); } //*** CWelcomePage::OnNotifyWizNext ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::OnNotify // // Description: // Process the WM_NOTIFY message. // // Arguments: // idCtrlIn // // pnmhdrIn // // Return Values: // LRESULT TRUE or FALSE // //-- ////////////////////////////////////////////////////////////////////////////// LRESULT CWelcomePage::OnNotify( WPARAM idCtrlIn , LPNMHDR pnmhdrIn ) { TraceFunc( "" ); LRESULT lr = TRUE; SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, 0 ); switch( pnmhdrIn->code ) { case PSN_SETACTIVE: PropSheet_SetWizButtons( GetParent( m_hwnd ), PSWIZB_NEXT ); break; case PSN_WIZNEXT: lr = OnNotifyWizNext(); break; } // switch: RETURN( lr ); } //*** CWelcomePage::OnNotify ////////////////////////////////////////////////////////////////////////////// //++ // // CWelcomePage::OnInitDialog // // Description: // Dialog proc for the Welcome page in the Wizard. // // Arguments: // hwndDlgIn // Window handle to this page. // // nMsgIn // The windows message that was sent to this page. // // wParam // The WPARAM of the message above. This is different for // different messages. // // lParam // The LPARAM of the message above. This is different for // different messages. // // Return Values: // LRESULT // //-- ////////////////////////////////////////////////////////////////////////////// INT_PTR CALLBACK CWelcomePage::S_DlgProc( HWND hwndDlgIn , UINT nMsgIn , WPARAM wParam , LPARAM lParam ) { // Don't do TraceFunc because every mouse movement // will cause this function to be called. WndMsg( hwndDlgIn, nMsgIn, wParam, lParam ); LRESULT lr = FALSE; CWelcomePage * pPage; if ( nMsgIn == WM_INITDIALOG ) { PROPSHEETPAGE * ppage = reinterpret_cast< PROPSHEETPAGE * >( lParam ); SetWindowLongPtr( hwndDlgIn, GWLP_USERDATA, (LPARAM) ppage->lParam ); pPage = reinterpret_cast< CWelcomePage * >( ppage->lParam ); pPage->m_hwnd = hwndDlgIn; } // if: else { pPage = reinterpret_cast< CWelcomePage *> ( GetWindowLongPtr( hwndDlgIn, GWLP_USERDATA ) ); } // else: if ( pPage != NULL ) { Assert( hwndDlgIn == pPage->m_hwnd ); switch ( nMsgIn ) { case WM_INITDIALOG: lr = pPage->OnInitDialog(); break; case WM_NOTIFY: lr = pPage->OnNotify( wParam, reinterpret_cast< LPNMHDR >( lParam ) ); break; // no default clause needed } // switch: nMsgIn } // if: page is specified return lr; } //*** CWelcomePage::S_DlgProc