windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/oc/oemads.c

400 lines
10 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// oemads.c
//
// Description:
// This is the dialog proc for the OEM Ads page.
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
const TCHAR TEXT_EXTENSION[] = _T("bmp");
static TCHAR *StrBitmapFiles;
static TCHAR *StrAllFiles;
static TCHAR g_szTextFileFilter[MAX_PATH + 1];
//---------------------------------------------------------------------------
//
// Function: OnOemAdsInitDialog
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog
//
// Returns: VOID
//
//---------------------------------------------------------------------------
static VOID
OnOemAdsInitDialog( IN HWND hwnd )
{
HRESULT hrPrintf;
//
// Load the resource strings
//
StrBitmapFiles = MyLoadString( IDS_BITMAP_FILES );
StrAllFiles = MyLoadString( IDS_ALL_FILES );
//
// Build the text file filter string
//
//
// The question marks (?) are just placehoders for where the NULL char
// will be inserted.
//
hrPrintf=StringCchPrintf( g_szTextFileFilter, AS(g_szTextFileFilter),
_T("%s(*.bmp)?*.bmp?%s(*.*)?*.*?"),
StrBitmapFiles,
StrAllFiles );
ConvertQuestionsToNull( g_szTextFileFilter );
}
//---------------------------------------------------------------------------
//
// Function: OnSetActiveOemAds
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog
//
// Returns: VOID
//
//---------------------------------------------------------------------------
static VOID
OnSetActiveOemAds( IN HWND hwnd)
{
//
// Set the window text for Logo Bitmap and Background Bitmap
//
SendDlgItemMessage(hwnd,
IDC_LOGOBITMAP,
WM_SETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) GenSettings.lpszLogoBitmap);
SendDlgItemMessage(hwnd,
IDC_BACKGROUNDBITMAP,
WM_SETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) GenSettings.lpszBackgroundBitmap);
PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_BACK | PSWIZB_NEXT);
}
//----------------------------------------------------------------------------
//
// Function: OnBrowseLoadBitmap
//
// Purpose: Creates a browse window for the user to select a bitmap and
// stores the path in the appropriate string (logo or background)
//
//----------------------------------------------------------------------------
VOID
OnBrowseLoadBitmap( IN HWND hwnd, IN WORD wControlID ) {
TCHAR szBitmapString[MAX_PATH] = _T("");
OPENFILENAME ofn;
DWORD dwFlags;
TCHAR PathBuffer[MAX_PATH];
INT iRet;
dwFlags = OFN_HIDEREADONLY |
OFN_PATHMUSTEXIST;
GetCurrentDirectory(MAX_PATH, PathBuffer);
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = g_szTextFileFilter;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0L;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szBitmapString;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = PathBuffer;
ofn.lpstrTitle = NULL;
ofn.Flags = dwFlags;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = TEXT_EXTENSION;
iRet = GetOpenFileName(&ofn);
if ( ! iRet )
return; // user pressed cancel on the dialog
//
// Now that we have the bitmap, store it in the proper string and fill
// the appropriate edit field
//
if( wControlID == IDC_LOGOBITMAP ) {
SendDlgItemMessage(hwnd,
IDC_LOGOBITMAP,
WM_SETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) szBitmapString);
}
else {
SendDlgItemMessage(hwnd,
IDC_BACKGROUNDBITMAP,
WM_SETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) szBitmapString);
}
}
//----------------------------------------------------------------------------
//
// Function: OnWizNextOemAds
//
// Purpose: Called when the Next button is pushed. Copies the bitmaps, if
// any chosen to the distribution share
//
//----------------------------------------------------------------------------
BOOL OnWizNextOemAds( IN HWND hwnd ) {
TCHAR szLogoDestination[MAX_PATH + 1] = _T("");
TCHAR szBackgroundDestination[MAX_PATH + 1] = _T("");
TCHAR szBitmapDestPath[MAX_PATH + 1] = _T("");
TCHAR szBackSlash[] = _T("\\");
BOOL bStayHere = FALSE;
DWORD dwReturnValue;
//
// If OemFilesPath doesn't have a value, give it one.
//
if ( WizGlobals.OemFilesPath[0] == _T('\0') ) {
ConcatenatePaths( WizGlobals.OemFilesPath,
WizGlobals.DistFolder,
_T("$oem$"),
NULL );
}
//
// Force creation of the $oem$ dir (if it doesn't exist already)
//
if ( ! EnsureDirExists(WizGlobals.OemFilesPath) ) {
ReportErrorId(hwnd,
MSGTYPE_ERR | MSGTYPE_WIN32,
IDS_ERR_CREATE_FOLDER,
WizGlobals.OemFilesPath);
}
//
// Fill the global structs with the edit box data
//
SendDlgItemMessage(hwnd,
IDC_LOGOBITMAP,
WM_GETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) GenSettings.lpszLogoBitmap);
SendDlgItemMessage(hwnd,
IDC_BACKGROUNDBITMAP,
WM_GETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) GenSettings.lpszBackgroundBitmap);
//
// Set the path where the bitmaps are to be copied to
// On a sysprep they go into the sysprep dir
// On a regular install they go to the $OEM$ dir
//
if( WizGlobals.iProductInstall == PRODUCT_SYSPREP )
{
ExpandEnvironmentStrings( _T("%SystemDrive%"),
szBitmapDestPath,
MAX_PATH );
lstrcatn( szBitmapDestPath, _T("\\sysprep"), MAX_PATH );
}
else
{
lstrcpyn( szBitmapDestPath, WizGlobals.OemFilesPath, MAX_PATH + 1 );
}
if( GenSettings.lpszLogoBitmap[0] != _T('\0') ) {
//
// Build up the destination path
//
ConcatenatePaths( szLogoDestination,
szBitmapDestPath,
MyGetFullPath( GenSettings.lpszLogoBitmap ),
NULL );
if( ! DoesFileExist( szLogoDestination ) ) {
if ( ! CopyFile(GenSettings.lpszLogoBitmap, szLogoDestination, TRUE) ) {
ReportErrorId(hwnd,
MSGTYPE_ERR | MSGTYPE_WIN32,
IDS_ERR_COPY_FILE,
GenSettings.lpszLogoBitmap, szLogoDestination);
bStayHere = TRUE;
}
}
}
if( GenSettings.lpszBackgroundBitmap[0] != _T('\0') ) {
//
// Build up the destination path
//
ConcatenatePaths( szBackgroundDestination,
szBitmapDestPath,
MyGetFullPath( GenSettings.lpszBackgroundBitmap ),
NULL);
if( ! DoesFileExist( szBackgroundDestination ) ) {
if ( ! CopyFile( GenSettings.lpszBackgroundBitmap,
szBackgroundDestination,
TRUE ) ) {
ReportErrorId(hwnd,
MSGTYPE_ERR | MSGTYPE_WIN32,
IDS_ERR_COPY_FILE,
GenSettings.lpszBackgroundBitmap,
szBackgroundDestination);
bStayHere = TRUE;
}
}
}
//
// Route the wizard
//
return (!bStayHere );
}
//----------------------------------------------------------------------------
//
// Function: DlgOemAdsPage
//
// Purpose: This is the dialog procedure for the OEM Ads page.
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK DlgOemAdsPage(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
BOOL bStatus = TRUE;
switch (uMsg) {
case WM_INITDIALOG:
OnOemAdsInitDialog( hwnd );
break;
case WM_COMMAND:
switch ( LOWORD(wParam) ) {
case IDC_LOGOBITMAPBROWSE:
if ( HIWORD(wParam) == BN_CLICKED )
OnBrowseLoadBitmap( hwnd, IDC_LOGOBITMAP );
break;
case IDC_BACKGROUNDBITMAPBROWSE:
if ( HIWORD(wParam) == BN_CLICKED )
OnBrowseLoadBitmap( hwnd, IDC_BACKGROUNDBITMAP );
break;
default:
bStatus = FALSE;
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR)lParam;
switch( pnmh->code ) {
case PSN_QUERYCANCEL:
CancelTheWizard( hwnd );
break;
case PSN_SETACTIVE:
OnSetActiveOemAds( hwnd );
break;
case PSN_WIZBACK:
break;
case PSN_WIZNEXT:
if ( !OnWizNextOemAds( hwnd ))
WIZ_FAIL(hwnd);
break;
default:
bStatus = FALSE;
break;
}
}
break;
default:
bStatus = FALSE;
break;
}
return bStatus;
}