windows-nt/Source/XPSP1/NT/multimedia/media/cdplayer/preferen.c
2020-09-26 16:20:57 +08:00

329 lines
8.4 KiB
C

/******************************Module*Header*******************************\
* Module Name: preferen.c
*
* Code to support the preferneces dialog box.
*
*
* Created: dd-mm-94
* Author: Stephen Estrop [StephenE]
*
* Copyright (c) 1994 Microsoft Corporation
\**************************************************************************/
#pragma warning( once : 4201 4214 )
#define NOOLE
#include <windows.h> /* required for all Windows applications */
#include <windowsx.h>
#include "resource.h"
#include "cdplayer.h"
#include "preferen.h"
/* --------------------------------------------------------------------
** Other stuff
** --------------------------------------------------------------------
*/
#include <commctrl.h>
WNDPROC lpfnDefBtnProc;
HWND hwndPrefDlg;
LRESULT CALLBACK
SubClassedBtnProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
/* -------------------------------------------------------------------------
** Private Globals
** -------------------------------------------------------------------------
*/
BOOL fSmallFont;
/******************************Public*Routine******************************\
* PreferencesDlgProc
*
*
*
* History:
* dd-mm-93 - StephenE - Created
*
\**************************************************************************/
BOOL CALLBACK
PreferencesDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
#if WINVER >= 0x0400
#include "literals.h"
#include "helpids.h"
static const DWORD aIds[] = {
IDC_STOP_CD_ON_EXIT, IDH_CD_STOP_CD_ON_EXIT,
IDC_SAVE_ON_EXIT, IDH_CD_SAVE_ON_EXIT,
IDC_SHOW_TOOLTIPS, IDH_CD_SHOW_TOOLTIPS,
IDC_INTRO_PLAY_LEN, IDH_CD_INTRO_LENGTH,
IDC_INTRO_SPINBTN, IDH_CD_INTRO_LENGTH,
IDC_SMALL_FONT, IDH_CD_DISPLAY_FONT,
IDC_LARGE_FONT, IDH_CD_DISPLAY_FONT,
IDC_LED_DISPLAY, IDH_CD_DISPLAY_FONT,
0, 0
};
#endif
switch ( message ) {
HANDLE_MSG( hwnd, WM_INITDIALOG, Preferences_OnInitDialog );
HANDLE_MSG( hwnd, WM_COMMAND, Preferences_OnCommand );
#ifdef DAYTONA
HANDLE_MSG( hwnd, WM_CTLCOLORDLG, Common_OnCtlColor );
HANDLE_MSG( hwnd, WM_CTLCOLORSTATIC, Common_OnCtlColor );
HANDLE_MSG( hwnd, WM_CTLCOLORBTN, Common_OnCtlColor );
#endif
#if WINVER >= 0x0400
case WM_HELP:
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, g_HelpFileName,
HELP_WM_HELP, (DWORD)(LPVOID)aIds );
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, g_HelpFileName,
HELP_CONTEXTMENU, (DWORD)(LPVOID)aIds );
break;
#endif
default:
return FALSE;
}
}
/*****************************Private*Routine******************************\
* Preferences_OnInitDialog
*
*
*
* History:
* dd-mm-94 - StephenE - Created
*
\**************************************************************************/
BOOL
Preferences_OnInitDialog(
HWND hwnd,
HWND hwndFocus,
LPARAM lParam
)
{
fSmallFont = g_fSmallLedFont;
if (!g_fSmallLedFont) {
LED_ToggleDisplayFont( GetDlgItem( hwnd, IDC_LED_DISPLAY ), g_fSmallLedFont );
}
Button_SetCheck( GetDlgItem( hwnd, IDC_SMALL_FONT ), g_fSmallLedFont );
Button_SetCheck( GetDlgItem( hwnd, IDC_LARGE_FONT ), !g_fSmallLedFont );
Button_SetCheck( GetDlgItem( hwnd, IDC_STOP_CD_ON_EXIT ), g_fStopCDOnExit );
Button_SetCheck( GetDlgItem( hwnd, IDC_SAVE_ON_EXIT ), g_fSaveOnExit );
Button_SetCheck( GetDlgItem( hwnd, IDC_SHOW_TOOLTIPS ), g_fToolTips );
#if WINVER >= 0x400
/*
** Set up the intro play length edit field
*/
Edit_LimitText( GetDlgItem( hwnd, IDC_INTRO_PLAY_LEN ), 2 );
SetDlgItemInt( hwnd, IDC_INTRO_PLAY_LEN, g_IntroPlayLength, TRUE );
SendDlgItemMessage( hwnd, IDC_INTRO_SPINBTN, UDM_SETRANGE, 0,
MAKELPARAM( INTRO_UPPER_LEN, INTRO_LOWER_LEN) );
/*
** Subclass the OK button so that we can perform validation on the
** intro play length.
*/
lpfnDefBtnProc = SubclassWindow( GetDlgItem(hwnd, IDOK),
SubClassedBtnProc );
hwndPrefDlg = hwnd;
#endif
return TRUE;
}
/*****************************Private*Routine******************************\
* Preferences_OnCommand
*
*
*
* History:
* dd-mm-94 - StephenE - Created
*
\**************************************************************************/
void
Preferences_OnCommand(
HWND hwnd,
int id,
HWND hwndCtl,
UINT codeNotify
)
{
switch (id) {
case IDC_SMALL_FONT:
if (!fSmallFont) {
fSmallFont = TRUE;
LED_ToggleDisplayFont( GetDlgItem( hwnd, IDC_LED_DISPLAY ), fSmallFont );
}
break;
case IDC_LARGE_FONT:
if (fSmallFont) {
fSmallFont = FALSE;
LED_ToggleDisplayFont( GetDlgItem( hwnd, IDC_LED_DISPLAY ), fSmallFont );
}
break;
case IDOK:
if ( fSmallFont != g_fSmallLedFont ) {
g_fSmallLedFont = fSmallFont;
LED_ToggleDisplayFont( g_hwndControls[INDEX(IDC_LED)], g_fSmallLedFont );
UpdateDisplay( DISPLAY_UPD_LED );
}
g_fToolTips = Button_GetCheck( GetDlgItem( hwnd, IDC_SHOW_TOOLTIPS ));
EnableToolTips( g_fToolTips );
g_fSaveOnExit = Button_GetCheck( GetDlgItem( hwnd, IDC_SAVE_ON_EXIT ) );
g_fStopCDOnExit = Button_GetCheck( GetDlgItem( hwnd, IDC_STOP_CD_ON_EXIT ) );
#if WINVER >= 0x400
{
BOOL fSuccess;
g_IntroPlayLength = (int)GetDlgItemInt( hwnd, IDC_INTRO_PLAY_LEN,
&fSuccess, TRUE );
/*
** As the edit field has already been validated the call above
** should not fail. But just make one final check...
*/
if (!fSuccess) {
g_IntroPlayLength = 10;
}
/*
** Make sure that the intro length is kept within its correct
** bounds.
*/
g_IntroPlayLength = min(g_IntroPlayLength, INTRO_UPPER_LEN);
g_IntroPlayLength = max(g_IntroPlayLength, INTRO_LOWER_LEN);
}
#endif
/* fall thru */
case IDCANCEL:
EndDialog( hwnd, id );
break;
}
}
#if WINVER >= 0x400
/*****************************Private*Routine******************************\
* SubClassedBtnProc
*
* This function is used to ensure that the Intro play length edit field
* always contains a valid integer number. Valid numbers are between
* INTRO_LOWER_LEN and INTRO_UPPER_LEN inclusive.
* ie. INTRO_LOWER_LEN >= i >= INTRO_UPPER_LEN
*
* History:
* dd-mm-94 - StephenE - Created
*
\**************************************************************************/
LRESULT CALLBACK
SubClassedBtnProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
/*
** When the user clicks on the OK button we get a BM_SETSTATE message
** with wParam != 0. When we get this message we should ensure that
** the Intro length edit box contains a valid integer number.
*/
if ( (message == BM_SETSTATE) && (wParam != 0) ) {
BOOL fSuccess;
int i;
/*
** Read the current edit field value.
*/
i = (int)GetDlgItemInt( hwndPrefDlg, IDC_INTRO_PLAY_LEN,
&fSuccess, TRUE );
/*
** if the above call failed it probably means that the users
** has entered junk in the edit field - so default back to the
** original value of g_IntroPlayLength.
*/
if (!fSuccess) {
i = g_IntroPlayLength;
}
/*
** Make sure that the intro length is kept within its correct
** bounds.
*/
if (i < INTRO_LOWER_LEN) {
i = INTRO_LOWER_LEN;
fSuccess = FALSE;
}
else if (i > INTRO_UPPER_LEN) {
i = INTRO_UPPER_LEN;
fSuccess = FALSE;
}
/*
** We only update the edit field if its value has
** become invalid.
*/
if (!fSuccess) {
SetDlgItemInt( hwndPrefDlg, IDC_INTRO_PLAY_LEN, i, TRUE );
UpdateWindow( GetDlgItem( hwndPrefDlg, IDC_INTRO_PLAY_LEN ) );
}
}
/*
** Make sure that we pass on all messages to the buttons original
** window proc.
*/
return CallWindowProc( lpfnDefBtnProc, hwnd, message, wParam, lParam);
}
#endif