929 lines
26 KiB
C
929 lines
26 KiB
C
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// File Name:
|
|
// rgseting.c
|
|
//
|
|
// Description:
|
|
// This file contains the dialog procedure for the regional settings
|
|
// page (IDD_REGIONALSETTINGS).
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#include "resource.h"
|
|
|
|
//
|
|
// Explanation of the var GenSettings.szLanguageLocaleId
|
|
//
|
|
// This var is to keep track of the locale id for the keyboard layout selected.
|
|
// If the user ever leaves the custom dialog and comes back to it, this var
|
|
// determines what locale to select for the keyboard layout. I can't just use
|
|
// they keyboard layout they selected because many locales have the same
|
|
// keyboard layout so I wouldn't know which one to select.
|
|
//
|
|
// static TCHAR g_szLanguageLocaleId[MAX_LANGUAGE_LEN] = _T("");
|
|
|
|
INT_PTR CALLBACK RegionalCustomDisplayDlg( IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam);
|
|
|
|
// *************************************************************************
|
|
//
|
|
// Dialog proc and helper functions for the regional settings Pop-Up
|
|
//
|
|
// *************************************************************************
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRegionalCustomButton
|
|
//
|
|
// Purpose: Pop-up the custom regional settings window
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnRegionalCustomButton( IN HWND hwnd ) {
|
|
|
|
DialogBox( FixedGlobals.hInstance,
|
|
MAKEINTRESOURCE( IDD_REGIONALSETTINGS_POPUP ),
|
|
hwnd,
|
|
RegionalCustomDisplayDlg );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: FindAndSelectInComboBox
|
|
//
|
|
// Purpose: Searches a combo box for a particular string and selects. If the
|
|
// string is not found than the first item is selected.
|
|
//
|
|
// Arguments: IN TCHAR *pString - the string to select
|
|
// IN HWND hwnd - handle to the dialog box
|
|
// IN INT iControlId - the resource Id of the combo box to search in
|
|
// IN BOOL bKeyboardLayout - TRUE if this is the keyboard layout
|
|
// combo box, FALSE if it is not
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
FindAndSelectInComboBox( IN TCHAR *pString,
|
|
IN HWND hwnd,
|
|
IN INT iControlId )
|
|
{
|
|
|
|
INT_PTR i;
|
|
INT_PTR iComboBoxCount;
|
|
LANGUAGELOCALE_NODE *pLocaleEntry;
|
|
|
|
iComboBoxCount = SendDlgItemMessage( hwnd,
|
|
iControlId,
|
|
CB_GETCOUNT,
|
|
0,
|
|
(LPARAM) pString );
|
|
|
|
for( i = 0; i < iComboBoxCount; i++ ) {
|
|
|
|
pLocaleEntry = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
iControlId,
|
|
CB_GETITEMDATA,
|
|
i,
|
|
0 );
|
|
|
|
if( lstrcmp( pString, pLocaleEntry->szLanguageLocaleId ) == 0 )
|
|
{
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
iControlId,
|
|
CB_SETCURSEL,
|
|
i,
|
|
0 );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// If we get to this point, then no match was found so just pick the
|
|
// first one
|
|
//
|
|
|
|
AssertMsg( FALSE, "No matching string found." );
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
iControlId,
|
|
CB_SETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: SelectDefaultLocale
|
|
//
|
|
// Purpose: Selects the default locale in a combo box.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
// IN INT ControlId - the resource Id of the combo box to select
|
|
// the default locale in
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
SelectDefaultLocale( IN HWND hwnd, IN INT ControlId ) {
|
|
|
|
INT_PTR i;
|
|
INT_PTR iComboBoxCount;
|
|
LANGUAGELOCALE_NODE *pLocale;
|
|
|
|
iComboBoxCount = SendDlgItemMessage( hwnd,
|
|
ControlId,
|
|
CB_GETCOUNT,
|
|
0,
|
|
0 );
|
|
|
|
for( i = 0; i < iComboBoxCount; i++ ) {
|
|
|
|
pLocale = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
ControlId,
|
|
CB_GETITEMDATA,
|
|
i,
|
|
0 );
|
|
|
|
//
|
|
// Check and see if we found it
|
|
//
|
|
if( lstrcmp( g_szDefaultLocale, pLocale->szLanguageLocaleId ) == 0 ) {
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
ControlId,
|
|
CB_SETCURSEL,
|
|
i,
|
|
0 );
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// If for some reason we couldn't find the default just select the first one
|
|
//
|
|
if( i >= iComboBoxCount ) {
|
|
|
|
AssertMsg( FALSE, "The default language locale was not found." );
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
ControlId,
|
|
CB_SETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: StoreLanguageLocales
|
|
//
|
|
// Purpose: Stores the locales the user specified in to their global
|
|
// variables.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
StoreLanguageLocales( IN HWND hwnd ) {
|
|
|
|
INT_PTR iComboBoxIndex;
|
|
LANGUAGELOCALE_NODE *pLocaleEntry;
|
|
|
|
//
|
|
// Grab the language locale id from the Menus combo box and store
|
|
// it in the proper global
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_MENUS,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
pLocaleEntry = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
IDC_CB_MENUS,
|
|
CB_GETITEMDATA,
|
|
iComboBoxIndex,
|
|
0 );
|
|
|
|
lstrcpyn( GenSettings.szMenuLanguage, pLocaleEntry->szLanguageLocaleId, AS(GenSettings.szMenuLanguage) );
|
|
|
|
//
|
|
// Grab the language locale id from the Units combo box and store
|
|
// it in the proper global
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_UNITS,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
pLocaleEntry = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
IDC_CB_UNITS,
|
|
CB_GETITEMDATA,
|
|
iComboBoxIndex,
|
|
0 );
|
|
|
|
lstrcpyn( GenSettings.szNumberLanguage, pLocaleEntry->szLanguageLocaleId, AS(GenSettings.szNumberLanguage) );
|
|
|
|
//
|
|
// Grab the language locale id from the Keyboard layout combo box and
|
|
// store it in the proper global
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_KEYBOARD_LAYOUT,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
pLocaleEntry = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
IDC_CB_KEYBOARD_LAYOUT,
|
|
CB_GETITEMDATA,
|
|
iComboBoxIndex,
|
|
0 );
|
|
|
|
lstrcpyn( GenSettings.szKeyboardLayout, pLocaleEntry->szKeyboardLayout, AS(GenSettings.szKeyboardLayout) );
|
|
|
|
lstrcpyn( GenSettings.szLanguageLocaleId, pLocaleEntry->szLanguageLocaleId, AS(GenSettings.szLanguageLocaleId) );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: LoadRegionalSettingsComboBoxes
|
|
//
|
|
// Purpose: Loads the menu, units and keybaord layout locale combo boxes
|
|
// with the locale strings.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
LoadRegionalSettingsComboBoxes( IN HWND hwnd ) {
|
|
|
|
INT_PTR iComboBoxIndex;
|
|
LANGUAGELOCALE_NODE *CurrentLocale = NULL;
|
|
|
|
//
|
|
// Add the valid locals to the combo boxes
|
|
//
|
|
for( CurrentLocale = FixedGlobals.LanguageLocaleList;
|
|
CurrentLocale != NULL;
|
|
CurrentLocale = CurrentLocale->next ) {
|
|
|
|
//
|
|
// Add it to the System combo box
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_MENUS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) CurrentLocale->szLanguageLocaleName );
|
|
|
|
//
|
|
// Associate the Language Locale ID with its entry in the System combo box
|
|
//
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CB_MENUS,
|
|
CB_SETITEMDATA,
|
|
iComboBoxIndex,
|
|
(LPARAM) CurrentLocale );
|
|
|
|
//
|
|
// Add it to the User combo box
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_UNITS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) CurrentLocale->szLanguageLocaleName );
|
|
|
|
//
|
|
// Associate the Language Locale ID with its entry in the User combo box
|
|
//
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CB_UNITS,
|
|
CB_SETITEMDATA,
|
|
iComboBoxIndex,
|
|
(LPARAM) CurrentLocale );
|
|
|
|
//
|
|
// Add it to the Keyboard combo box
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_KEYBOARD_LAYOUT,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) CurrentLocale->szLanguageLocaleName );
|
|
|
|
//
|
|
// Associate the Language Locale ID with its entry in the Keyboard combo box
|
|
//
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CB_KEYBOARD_LAYOUT,
|
|
CB_SETITEMDATA,
|
|
iComboBoxIndex,
|
|
(LPARAM) CurrentLocale );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRegionalCustomInitDialog
|
|
//
|
|
// Purpose: Populates the locale combo boxes and selects the proper entry.
|
|
//
|
|
// Arguments: HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnRegionalCustomInitDialog( IN HWND hwnd ) {
|
|
|
|
LoadRegionalSettingsComboBoxes( hwnd );
|
|
|
|
//
|
|
// Set the initial selections for each combo box
|
|
//
|
|
if( GenSettings.szMenuLanguage[0] != '\0' ) {
|
|
|
|
FindAndSelectInComboBox( GenSettings.szMenuLanguage,
|
|
hwnd,
|
|
IDC_CB_MENUS );
|
|
|
|
}
|
|
else {
|
|
|
|
//
|
|
// Select the default locale
|
|
//
|
|
SelectDefaultLocale( hwnd, IDC_CB_MENUS );
|
|
|
|
}
|
|
|
|
if( GenSettings.szNumberLanguage[0] != '\0' ) {
|
|
|
|
FindAndSelectInComboBox( GenSettings.szNumberLanguage,
|
|
hwnd,
|
|
IDC_CB_UNITS );
|
|
|
|
}
|
|
else {
|
|
|
|
//
|
|
// Select the default locale
|
|
//
|
|
SelectDefaultLocale( hwnd, IDC_CB_UNITS );
|
|
|
|
}
|
|
|
|
if( GenSettings.szLanguageLocaleId[0] != '\0' ) {
|
|
|
|
FindAndSelectInComboBox( GenSettings.szLanguageLocaleId,
|
|
hwnd,
|
|
IDC_CB_KEYBOARD_LAYOUT );
|
|
|
|
}
|
|
else {
|
|
|
|
//
|
|
// Select the default locale
|
|
//
|
|
SelectDefaultLocale( hwnd, IDC_CB_KEYBOARD_LAYOUT );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: RegionalCustomDisplayDlg
|
|
//
|
|
// Purpose: Dialog procedure for specify individual regional settings
|
|
//
|
|
// Arguments: standard Win32 dialog proc arguments
|
|
//
|
|
// Returns: standard Win32 dialog proc return value -- whether the message
|
|
// was handled or not
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
INT_PTR CALLBACK
|
|
RegionalCustomDisplayDlg( IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam) {
|
|
|
|
BOOL bStatus = TRUE;
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
OnRegionalCustomInitDialog( hwnd );
|
|
|
|
break;
|
|
|
|
case WM_COMMAND: {
|
|
|
|
int nButtonId;
|
|
|
|
switch ( nButtonId = LOWORD (wParam ) ) {
|
|
|
|
case IDOK:
|
|
|
|
StoreLanguageLocales( hwnd );
|
|
|
|
EndDialog( hwnd, TRUE );
|
|
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
|
|
EndDialog( hwnd, FALSE );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
|
|
}
|
|
|
|
return( bStatus );
|
|
|
|
}
|
|
|
|
// *************************************************************************
|
|
//
|
|
// Dialog proc and helper functions for the Regional Settings Wizard page
|
|
//
|
|
// *************************************************************************
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnCustomizeCheckBox
|
|
//
|
|
// Purpose: Greys and ungreys controls appropriately depending on if the
|
|
// customize check box is checked or not.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnCustomizeCheckBox( IN HWND hwnd ) {
|
|
|
|
if( IsDlgButtonChecked( hwnd, IDC_CHB_CUSTOMIZE ) ) {
|
|
|
|
EnableWindow( GetDlgItem( hwnd, IDC_LANG_TEXT ), FALSE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_CB_LANGUAGE_LOCALE ), FALSE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_BUT_CUSTOM ), TRUE );
|
|
|
|
}
|
|
else {
|
|
|
|
EnableWindow( GetDlgItem( hwnd, IDC_LANG_TEXT ), TRUE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_CB_LANGUAGE_LOCALE ), TRUE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_BUT_CUSTOM ), FALSE );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRadioButtonRegionalSettings
|
|
//
|
|
// Purpose: Greys and ungreys controls appropriately depending on what radio
|
|
// button is selected
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
// IN INT nButtonId - resource Id of the button that was clicked
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnRadioButtonRegionalSettings( IN HWND hwnd,
|
|
IN INT nButtonId ) {
|
|
|
|
if( nButtonId == IDC_RB_SPECIFY ) {
|
|
|
|
EnableWindow( GetDlgItem( hwnd, IDC_CHB_CUSTOMIZE ), TRUE );
|
|
|
|
OnCustomizeCheckBox( hwnd );
|
|
|
|
}
|
|
else {
|
|
|
|
EnableWindow( GetDlgItem( hwnd, IDC_LANG_TEXT ), FALSE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_CB_LANGUAGE_LOCALE ), FALSE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_CHB_CUSTOMIZE ), FALSE );
|
|
EnableWindow( GetDlgItem( hwnd, IDC_BUT_CUSTOM ), FALSE );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRegionalSettingsInitDialog
|
|
//
|
|
// Purpose: Loads the locale combo box with the locale strings and selects
|
|
// the default entry.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnRegionalSettingsInitDialog( IN HWND hwnd ) {
|
|
|
|
INT_PTR iComboBoxIndex;
|
|
LANGUAGELOCALE_NODE *CurrentLocale;
|
|
|
|
CheckRadioButton( hwnd,
|
|
IDC_RB_SKIP,
|
|
IDC_RB_SPECIFY,
|
|
IDC_RB_SKIP );
|
|
|
|
//
|
|
// Set the initial controls that are greyed/ungreyed
|
|
//
|
|
OnRadioButtonRegionalSettings( hwnd, IDC_RB_USE_DEFAULT );
|
|
|
|
//
|
|
// Add the language locals to the combo box
|
|
//
|
|
for( CurrentLocale = FixedGlobals.LanguageLocaleList;
|
|
CurrentLocale != NULL;
|
|
CurrentLocale = CurrentLocale->next ) {
|
|
|
|
//
|
|
// Add the locale to the combo box
|
|
//
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_LANGUAGE_LOCALE,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM) CurrentLocale->szLanguageLocaleName );
|
|
|
|
//
|
|
// Associate the Language Locale ID with its entry in the combo box
|
|
//
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CB_LANGUAGE_LOCALE,
|
|
CB_SETITEMDATA,
|
|
iComboBoxIndex,
|
|
(LPARAM) CurrentLocale );
|
|
|
|
}
|
|
|
|
//
|
|
// Select the default locale
|
|
//
|
|
SelectDefaultLocale( hwnd, IDC_CB_LANGUAGE_LOCALE );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRegionalSettingsSetActive
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
OnRegionalSettingsSetActive( IN HWND hwnd )
|
|
{
|
|
|
|
if( GenSettings.iUnattendMode == UMODE_FULL_UNATTENDED )
|
|
{
|
|
EnableWindow( GetDlgItem( hwnd, IDC_RB_SKIP ), FALSE );
|
|
}
|
|
else
|
|
{
|
|
EnableWindow( GetDlgItem( hwnd, IDC_RB_SKIP ), TRUE );
|
|
}
|
|
|
|
switch( GenSettings.iRegionalSettings ) {
|
|
|
|
case REGIONAL_SETTINGS_SKIP:
|
|
|
|
if( GenSettings.iUnattendMode == UMODE_FULL_UNATTENDED )
|
|
{
|
|
CheckRadioButton( hwnd,
|
|
IDC_RB_SKIP,
|
|
IDC_RB_SPECIFY,
|
|
IDC_RB_USE_DEFAULT );
|
|
|
|
}
|
|
else
|
|
{
|
|
CheckRadioButton( hwnd,
|
|
IDC_RB_SKIP,
|
|
IDC_RB_SPECIFY,
|
|
IDC_RB_SKIP );
|
|
}
|
|
|
|
OnRadioButtonRegionalSettings( hwnd, IDC_RB_SKIP );
|
|
|
|
break;
|
|
|
|
case REGIONAL_SETTINGS_NOT_SPECIFIED:
|
|
case REGIONAL_SETTINGS_DEFAULT:
|
|
|
|
CheckRadioButton( hwnd,
|
|
IDC_RB_SKIP,
|
|
IDC_RB_SPECIFY,
|
|
IDC_RB_USE_DEFAULT );
|
|
|
|
OnRadioButtonRegionalSettings( hwnd, IDC_RB_USE_DEFAULT );
|
|
|
|
break;
|
|
|
|
case REGIONAL_SETTINGS_SPECIFY:
|
|
|
|
CheckRadioButton( hwnd,
|
|
IDC_RB_SKIP,
|
|
IDC_RB_SPECIFY,
|
|
IDC_RB_SPECIFY );
|
|
|
|
OnRadioButtonRegionalSettings( hwnd, IDC_RB_SPECIFY );
|
|
|
|
if( GenSettings.bUseCustomLocales ) {
|
|
|
|
CheckDlgButton( hwnd, IDC_CHB_CUSTOMIZE, BST_CHECKED );
|
|
|
|
OnCustomizeCheckBox( hwnd );
|
|
|
|
}
|
|
else {
|
|
|
|
FindAndSelectInComboBox( GenSettings.szLanguage,
|
|
hwnd,
|
|
IDC_CB_LANGUAGE_LOCALE );
|
|
|
|
CheckDlgButton( hwnd, IDC_CHB_CUSTOMIZE, BST_UNCHECKED );
|
|
|
|
OnCustomizeCheckBox( hwnd );
|
|
|
|
}
|
|
break;
|
|
|
|
default:
|
|
AssertMsg(FALSE, "Bad case for Regional Settings");
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnWizNextRegionalSettings
|
|
//
|
|
// Purpose: Store the radio button choice that was made and the language
|
|
// locale, if necessary.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
|
//
|
|
// Returns: BOOL
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
BOOL
|
|
OnWizNextRegionalSettings( IN HWND hwnd ) {
|
|
|
|
BOOL bResult = TRUE;
|
|
|
|
if( IsDlgButtonChecked( hwnd, IDC_RB_SKIP ) ) {
|
|
|
|
if( GenSettings.iUnattendMode == UMODE_FULL_UNATTENDED ) {
|
|
|
|
ReportErrorId( hwnd,
|
|
MSGTYPE_ERR,
|
|
IDS_ERR_FULL_UNATTEND_REGION_SET );
|
|
|
|
bResult = FALSE;
|
|
|
|
}
|
|
else {
|
|
|
|
GenSettings.iRegionalSettings = REGIONAL_SETTINGS_SKIP;
|
|
|
|
}
|
|
|
|
}
|
|
else if( IsDlgButtonChecked( hwnd, IDC_RB_USE_DEFAULT ) ) {
|
|
|
|
GenSettings.iRegionalSettings = REGIONAL_SETTINGS_DEFAULT;
|
|
|
|
}
|
|
else {
|
|
|
|
GenSettings.iRegionalSettings = REGIONAL_SETTINGS_SPECIFY;
|
|
|
|
if( IsDlgButtonChecked( hwnd, IDC_CHB_CUSTOMIZE ) ) {
|
|
|
|
GenSettings.bUseCustomLocales = TRUE;
|
|
|
|
}
|
|
else {
|
|
|
|
INT_PTR iComboBoxIndex;
|
|
LANGUAGELOCALE_NODE *pLocaleEntry;
|
|
|
|
GenSettings.bUseCustomLocales = FALSE;
|
|
|
|
//
|
|
// Grab the language locale
|
|
//
|
|
|
|
iComboBoxIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CB_LANGUAGE_LOCALE,
|
|
CB_GETCURSEL,
|
|
0,
|
|
0 );
|
|
|
|
pLocaleEntry = (LANGUAGELOCALE_NODE *) SendDlgItemMessage( hwnd,
|
|
IDC_CB_LANGUAGE_LOCALE,
|
|
CB_GETITEMDATA,
|
|
iComboBoxIndex,
|
|
0 );
|
|
|
|
lstrcpyn( GenSettings.szLanguage,
|
|
pLocaleEntry->szLanguageLocaleId, AS(GenSettings.szLanguage) );
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ( bResult );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: DlgRegionalSettingsPage
|
|
//
|
|
// Purpose: Dialog procedure for the Regional Settings page
|
|
//
|
|
// Arguments: standard Win32 dialog proc arguments
|
|
//
|
|
// Returns: standard Win32 dialog proc return value -- whether the message
|
|
// was handled or not
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
INT_PTR CALLBACK
|
|
DlgRegionalSettingsPage( IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam ) {
|
|
|
|
BOOL bStatus = TRUE;
|
|
|
|
switch( uMsg ) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
OnRegionalSettingsInitDialog( hwnd );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_COMMAND: {
|
|
|
|
int nButtonId;
|
|
|
|
switch ( nButtonId = LOWORD(wParam) ) {
|
|
|
|
case IDC_BUT_CUSTOM:
|
|
|
|
if( HIWORD( wParam ) == BN_CLICKED ) {
|
|
OnRegionalCustomButton( hwnd );
|
|
}
|
|
break;
|
|
|
|
case IDC_CHB_CUSTOMIZE:
|
|
|
|
if( HIWORD( wParam ) == BN_CLICKED ) {
|
|
OnCustomizeCheckBox( hwnd );
|
|
}
|
|
break;
|
|
|
|
case IDC_RB_SKIP:
|
|
case IDC_RB_USE_DEFAULT:
|
|
case IDC_RB_SPECIFY:
|
|
if( HIWORD( wParam ) == BN_CLICKED )
|
|
OnRadioButtonRegionalSettings( hwnd, nButtonId );
|
|
break;
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_NOTIFY: {
|
|
|
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
|
|
|
switch( pnmh->code ) {
|
|
|
|
case PSN_QUERYCANCEL:
|
|
|
|
WIZ_CANCEL(hwnd);
|
|
break;
|
|
|
|
case PSN_SETACTIVE: {
|
|
|
|
g_App.dwCurrentHelp = IDH_REGN_STGS;
|
|
|
|
OnRegionalSettingsSetActive( hwnd );
|
|
|
|
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
break;
|
|
|
|
}
|
|
case PSN_WIZBACK:
|
|
|
|
bStatus = FALSE;
|
|
break;
|
|
|
|
case PSN_WIZNEXT: {
|
|
|
|
if ( !OnWizNextRegionalSettings( hwnd ) )
|
|
WIZ_FAIL(hwnd);
|
|
else
|
|
bStatus = FALSE;
|
|
|
|
}
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
WIZ_HELP();
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
|
|
}
|
|
|
|
return( bStatus );
|
|
|
|
}
|
|
|