361 lines
7.8 KiB
C++
361 lines
7.8 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1999-2001 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// CompletionPage.cpp
|
|
//
|
|
// Maintained By:
|
|
// David Potter (DavidP) 22-MAR-2001
|
|
// Geoffrey Pease (GPease) 12-MAY-2000
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Pch.h"
|
|
#include "CompletionPage.h"
|
|
#include "WizardUtils.h"
|
|
|
|
DEFINE_THISCLASS("CCompletionPage");
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CCompletionPage::CCompletionPage
|
|
//
|
|
// Description:
|
|
// Constructor.
|
|
//
|
|
// Arguments:
|
|
// idsTitleIn -- Resource ID for the title string.
|
|
// idsDescIn -- Resource ID for the description string.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CCompletionPage::CCompletionPage(
|
|
UINT idsTitleIn
|
|
, UINT idsDescIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
Assert( idsTitleIn != 0 );
|
|
Assert( idsDescIn != 0 );
|
|
|
|
// m_hwnd
|
|
m_hFont = NULL;
|
|
|
|
m_idsTitle = idsTitleIn;
|
|
m_idsDesc = idsDescIn;
|
|
|
|
TraceFuncExit();
|
|
|
|
} //*** CCompletionPage::CCompletionPage()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CCompletionPage::~CCompletionPage( void )
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CCompletionPage::~CCompletionPage( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
if ( m_hFont != NULL )
|
|
{
|
|
DeleteObject( m_hFont );
|
|
}
|
|
|
|
TraceFuncExit();
|
|
|
|
} //*** CCompletionPage::~CCompletionPage( void )
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// LRESULT
|
|
// CCompletionPage::OnInitDialog( void )
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CCompletionPage::OnInitDialog( void )
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = FALSE;
|
|
HDC hdc = NULL;
|
|
HRESULT hr;
|
|
|
|
NONCLIENTMETRICS ncm;
|
|
|
|
LOGFONT LogFont;
|
|
INT iSize;
|
|
|
|
DWORD dw;
|
|
BOOL fRet;
|
|
BSTR bstr = NULL;
|
|
|
|
WCHAR szFontSize[ 3 ]; // shouldn't be bigger than 2 digits!!
|
|
|
|
//
|
|
// TODO: gpease 12-MAY-2000
|
|
// Fill in the summary control.
|
|
//
|
|
|
|
//
|
|
// 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 )
|
|
{
|
|
goto Win32Error;
|
|
}
|
|
|
|
//
|
|
// 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 )
|
|
{
|
|
goto Win32Error;
|
|
}
|
|
|
|
//
|
|
// Use the magic equation....
|
|
//
|
|
LogFont.lfHeight = 0 - ( GetDeviceCaps( hdc, LOGPIXELSY ) * iSize / 72 );
|
|
|
|
//
|
|
// Create the font.
|
|
//
|
|
m_hFont = CreateFontIndirect( &LogFont );
|
|
if ( m_hFont == NULL )
|
|
{
|
|
goto Win32Error;
|
|
}
|
|
|
|
//
|
|
// Apply the font.
|
|
//
|
|
SetWindowFont( GetDlgItem( m_hwnd, IDC_COMPLETION_S_TITLE ), m_hFont, TRUE );
|
|
|
|
//
|
|
// Set the text of the title control.
|
|
//
|
|
|
|
hr = HrLoadStringIntoBSTR( g_hInstance, m_idsTitle, &bstr );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
SetDlgItemText( m_hwnd, IDC_COMPLETION_S_TITLE, bstr );
|
|
|
|
//
|
|
// Set the text of the description control.
|
|
//
|
|
|
|
hr = HrLoadStringIntoBSTR( g_hInstance, m_idsDesc, &bstr );
|
|
if ( FAILED( hr ) )
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
SetDlgItemText( m_hwnd, IDC_COMPLETION_S_DESC, bstr );
|
|
|
|
goto Cleanup;
|
|
|
|
Win32Error:
|
|
TW32( GetLastError() );
|
|
|
|
Cleanup:
|
|
TraceSysFreeString( bstr );
|
|
if ( hdc != NULL )
|
|
{
|
|
ReleaseDC( m_hwnd, hdc);
|
|
}
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CCompletionPage::OnInitDialog()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// LRESULT
|
|
// CCompletionPage::OnNotify(
|
|
// WPARAM idCtrlIn,
|
|
// LPNMHDR pnmhdrIn
|
|
// )
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CCompletionPage::OnNotify(
|
|
WPARAM idCtrlIn,
|
|
LPNMHDR pnmhdrIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = TRUE;
|
|
|
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, 0 );
|
|
|
|
switch( pnmhdrIn->code )
|
|
{
|
|
case PSN_SETACTIVE:
|
|
// Disable cancel
|
|
EnableWindow( GetDlgItem( GetParent( m_hwnd ), IDCANCEL ), FALSE );
|
|
|
|
// Show Finish
|
|
PropSheet_SetWizButtons( GetParent( m_hwnd ), PSWIZB_FINISH );
|
|
break;
|
|
} // switch: notify code
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CCompletionPage::OnNotify()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// LRESULT
|
|
// CCompletionPage::OnCommand(
|
|
// UINT idNotificationIn,
|
|
// UINT idControlIn,
|
|
// HWND hwndSenderIn
|
|
// )
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CCompletionPage::OnCommand(
|
|
UINT idNotificationIn,
|
|
UINT idControlIn,
|
|
HWND hwndSenderIn
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
LRESULT lr = FALSE;
|
|
|
|
switch ( idControlIn )
|
|
{
|
|
case IDC_COMPLETION_PB_VIEW_LOG:
|
|
if ( idNotificationIn == BN_CLICKED )
|
|
{
|
|
THR( HrViewLogFile( m_hwnd ) );
|
|
lr = TRUE;
|
|
} // if: button click
|
|
break;
|
|
|
|
} // switch: idControlIn
|
|
|
|
RETURN( lr );
|
|
|
|
} //*** CCompletionPage::OnCommand()
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// INT_PTR
|
|
// CALLBACK
|
|
// CCompletionPage::S_DlgProc(
|
|
// HWND hwndDlgIn,
|
|
// UINT nMsgIn,
|
|
// WPARAM wParam,
|
|
// LPARAM lParam
|
|
// )
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
INT_PTR
|
|
CALLBACK
|
|
CCompletionPage::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;
|
|
|
|
CCompletionPage * pPage;
|
|
|
|
if ( nMsgIn == WM_INITDIALOG )
|
|
{
|
|
PROPSHEETPAGE * ppage = reinterpret_cast< PROPSHEETPAGE * >( lParam );
|
|
SetWindowLongPtr( hwndDlgIn, GWLP_USERDATA, (LPARAM) ppage->lParam );
|
|
pPage = reinterpret_cast< CCompletionPage * >( ppage->lParam );
|
|
pPage->m_hwnd = hwndDlgIn;
|
|
}
|
|
else
|
|
{
|
|
pPage = reinterpret_cast< CCompletionPage *> ( GetWindowLongPtr( hwndDlgIn, GWLP_USERDATA ) );
|
|
}
|
|
|
|
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;
|
|
|
|
case WM_COMMAND:
|
|
lr = pPage->OnCommand( HIWORD( wParam ), LOWORD( wParam ), reinterpret_cast< HWND >( lParam ) );
|
|
break;
|
|
|
|
// no default clause needed
|
|
} // switch: nMsgIn
|
|
} // if: page is specified
|
|
|
|
return lr;
|
|
|
|
} //*** CCompletionPage::S_DlgProc()
|