windows-nt/Source/XPSP1/NT/enduser/speech/tts/ms_entropic/ttspropertiesdialog.cpp
2020-09-26 16:20:57 +08:00

263 lines
9.5 KiB
C++

/****************************************************************************
* TTSPropertiesDialog.cpp
*
* TTS Engine Advanced Properties Dialog handler
*
* Owner: aaronhal
*
* Copyright (c) 1999 Microsoft Corporation All Rights Reserved.
*
*****************************************************************************/
#include "stdafx.h"
#include "ms_entropicengine.h"
#include "resource.h"
#include "sphelper.h"
#include "TTSPropertiesDialog.h"
/*****************************************************************************
* CTTSPropertiesDialog::CTTSPropertiesDialog *
*--------------------------------------------*
*
* Description: Constructor
*
***************************************************************** aaronhal ***/
CTTSPropertiesDialog::CTTSPropertiesDialog( HINSTANCE hInstance, HWND hwndParent )
{
m_hInstance = hInstance;
m_hwndParent = hwndParent;
m_dwSeparatorAndDecimal = 0;
m_dwShortDateOrder = 0;
} /* CTTSPropertiesDialog */
/*****************************************************************************
* CTTSPropertiesDialog::Run *
*---------------------------*
*
* Description: Launches the dialog associated with this object
*
* Return: S_OK if values accepted,
* S_FALSE if cancelled,
*
***************************************************************** aaronhal ***/
HRESULT CTTSPropertiesDialog::Run()
{
HRESULT hr = S_OK;
if ( SUCCEEDED( hr ) )
{
hr = (HRESULT) g_Unicode.DialogBoxParam( m_hInstance, (LPCWSTR) MAKEINTRESOURCE( IDD_TTS_ADV ), m_hwndParent,
DlgProc, (LPARAM) this );
}
return hr;
} /* Run */
/*****************************************************************************
* CTTSPropertiesDialog::InitDialog *
*----------------------------------*
*
* Description: Static member function which handles the WM_INITDIALOG
* message. Set windows up, cache this pointer, etc.
*
* Return: TRUE
*
***************************************************************** aaronhal ***/
HRESULT CTTSPropertiesDialog::InitDialog( HWND hDlg, LPARAM lParam )
{
HRESULT hr = S_OK;
//--- Cache the 'this' pointer
g_Unicode.SetWindowLongPtr(hDlg, GWLP_USERDATA, lParam);
//--- Retrieve the current settings from the registry
CSpDynamicString dstrTokenKeyName;
hr = StringFromCLSID( CLSID_MSE_TTSEngine, &dstrTokenKeyName );
if ( SUCCEEDED( hr ) )
{
hr = SpCreateNewToken( L"HKEY_CURRENT_USER\\Software\\Microsoft\\Speech\\Voices", dstrTokenKeyName,
&This(hDlg)->m_cpEngineToken );
}
if ( SUCCEEDED( hr ) )
{
This(hDlg)->m_cpEngineToken->GetDWORD( L"SeparatorAndDecimal",
&This(hDlg)->m_dwSeparatorAndDecimal );
This(hDlg)->m_cpEngineToken->GetDWORD( L"ShortDateOrder", &This(hDlg)->m_dwShortDateOrder );
//--- Set the state of the dialog
if ( This(hDlg)->m_dwSeparatorAndDecimal & (DWORD) PERIOD_COMMA )
{
g_Unicode.SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_CHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_UNCHECKED, 0 );
}
else
{
//--- Default is comma separator, period decimal point
g_Unicode.SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
}
if ( This(hDlg)->m_dwShortDateOrder & (DWORD) YEAR_MONTH_DAY )
{
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_CHECKED, 0 );
}
else if ( This(hDlg)->m_dwShortDateOrder & (DWORD) DAY_MONTH_YEAR )
{
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_CHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
}
else
{
//--- Default is month day year
g_Unicode.SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
g_Unicode.SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
}
}
return hr;
} /* InitDialog */
/*****************************************************************************
* CTTSPropertiesDialog::DlgProc *
*-------------------------------*
*
* Description: Static member for Windows callback.
*
* Return: TRUE if message was handled, FALSE otherwise
*
***************************************************************** aaronhal ***/
INT_PTR CALLBACK CTTSPropertiesDialog::DlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = FALSE;
switch (message)
{
case WM_INITDIALOG:
fProcessed = SUCCEEDED( InitDialog( hDlg, lParam ) );
break;
case WM_COMMAND:
switch ( LOWORD(wParam) )
{
case IDC_COMMA_PERIOD:
{
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
fProcessed = TRUE;
}
break;
case IDC_PERIOD_COMMA:
{
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_CHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_UNCHECKED, 0 );
fProcessed = TRUE;
}
break;
case IDC_MDY:
{
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
fProcessed = TRUE;
}
break;
case IDC_DMY:
{
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_CHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
fProcessed = TRUE;
}
break;
case IDC_YMD:
{
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_CHECKED, 0 );
fProcessed = TRUE;
}
break;
case IDRESTORE:
{
//--- Default is comma separator, period decimal point
SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_COMMA_PERIOD, BM_SETCHECK, BST_CHECKED, 0 );
//--- Default is month day year
SendDlgItemMessage( hDlg, IDC_MDY, BM_SETCHECK, BST_CHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_DMY, BM_SETCHECK, BST_UNCHECKED, 0 );
SendDlgItemMessage( hDlg, IDC_YMD, BM_SETCHECK, BST_UNCHECKED, 0 );
}
break;
case IDCANCEL:
EndDialog( hDlg, (int)S_FALSE );
fProcessed = TRUE;
break;
case IDOK:
This(hDlg)->UpdateValues( hDlg );
EndDialog( hDlg, (int)S_OK );
fProcessed = TRUE;
break;
}
break;
}
return int(fProcessed);
} /* DlgProc */
/*****************************************************************************
* CTTSPropertiesDialog::Update *
*------------------------------*
*
* Description: Write new parameters to the registry.
*
* Return: Nothing.
*
***************************************************************** aaronhal ***/
void CTTSPropertiesDialog::UpdateValues( HWND hDlg )
{
LRESULT lrValue = 0;
//--- Set short date format
lrValue = SendDlgItemMessage( hDlg, IDC_MDY, BM_GETCHECK, 0, 0 );
if ( lrValue == BST_CHECKED )
{
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) MONTH_DAY_YEAR );
}
else
{
lrValue = SendDlgItemMessage( hDlg, IDC_DMY, BM_GETCHECK, 0, 0 );
if ( lrValue == BST_CHECKED )
{
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) DAY_MONTH_YEAR );
}
else
{
This(hDlg)->m_cpEngineToken->SetDWORD( L"ShortDateOrder", (DWORD) YEAR_MONTH_DAY );
}
}
//--- Set number separator and decimal point
lrValue = SendDlgItemMessage( hDlg, IDC_PERIOD_COMMA, BM_GETCHECK, 0, 0 );
if ( lrValue == BST_CHECKED )
{
This(hDlg)->m_cpEngineToken->SetDWORD( L"SeparatorAndDecimal", (DWORD) PERIOD_COMMA );
}
else
{
This(hDlg)->m_cpEngineToken->SetDWORD( L"SeparatorAndDecimal", (DWORD) COMMA_PERIOD );
}
} /* Update */