windows-nt/Source/XPSP1/NT/multimedia/directx/dplay/dvoice/dxvhelp/maindlg.cpp

517 lines
14 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*==========================================================================
*
* Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved.
*
* File: maindlg.cpp
* Content: Main Dialog Support Routines
* History:
*
* Date By Reason
* ==== == ======
* 10/15/99 rodtoll created it
* 10/15/99 rodtoll Placed guards to prevent operating on window once it's gone
* 10/20/99 rodtoll Fix: Bug #114185 Adjusting volume while not connected causes crash
* 11/12/99 rodtoll Added code to handle the new "Enable Echo suppression" check box.
* 12/07/99 rodtoll Bug #122628 Make error messages silent when running in silent mode
* 7/21/2000 rodtoll 64-bit build bug -- just appeared
*
***************************************************************************/
#include "dxvhelppch.h"
PDXVHELP_RTINFO g_prtInfo = NULL;
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_EnumPlayers"
BOOL FAR PASCAL MainDialog_EnumPlayers(
DPID dpId,
DWORD dwPlayerType,
LPCDPNAME lpName,
DWORD dwFlags,
LPVOID lpContext
)
{
PDXVHELP_RTINFO prtInfo = (PDXVHELP_RTINFO) lpContext;
MainDialog_AddTransportPlayer( prtInfo->hMainDialog, dpId );
return TRUE;
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_UpdatePlayerList"
void MainDialog_UpdatePlayerList( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
prtInfo->lpdpDirectPlay->EnumPlayers( NULL, MainDialog_EnumPlayers, prtInfo, DPENUMPLAYERS_ALL );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_AddTransportPlayer"
void MainDialog_AddTransportPlayer( HWND hDlg, DWORD dwID )
{
TCHAR tszBuffer[100];
_stprintf( tszBuffer, _T("0x%x"), dwID );
SendMessage( GetDlgItem( hDlg, IDC_LIST_DPLAY ), LB_ADDSTRING, 0, (WPARAM) tszBuffer );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_RemoveTransportPlayer"
void MainDialog_RemoveTransportPlayer( HWND hDlg, DWORD dwID )
{
TCHAR tszBuffer[100];
_stprintf( tszBuffer, _T("0x%x"), dwID );
LONG_PTR lResult;
lResult = SendMessage( GetDlgItem( hDlg, IDC_LIST_DPLAY ), LB_FINDSTRINGEXACT, -1, (WPARAM)tszBuffer );
if( lResult != LB_ERR )
{
SendMessage( GetDlgItem( hDlg, IDC_LIST_DPLAY ), LB_DELETESTRING, lResult, 0 );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_AddVoicePlayer"
void MainDialog_AddVoicePlayer( HWND hDlg, DWORD dwID )
{
TCHAR tszBuffer[100];
_stprintf( tszBuffer, _T("0x%x"), dwID );
SendMessage( GetDlgItem( hDlg, IDC_LIST_DVOICE ), LB_ADDSTRING, 0, (WPARAM)tszBuffer );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_RemoveVoicePlayer"
void MainDialog_RemoveVoicePlayer( HWND hDlg, DWORD dwID )
{
TCHAR tszBuffer[100];
_stprintf( tszBuffer, _T("0x%x"), dwID );
LONG_PTR lResult;
lResult = SendMessage( GetDlgItem( hDlg, IDC_LIST_DVOICE ), LB_FINDSTRINGEXACT, -1, (WPARAM)tszBuffer );
if( lResult != LB_ERR )
{
SendMessage( GetDlgItem( hDlg, IDC_LIST_DVOICE ), LB_DELETESTRING, lResult, 0 );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_AddToLog"
void MainDialog_AddToLog( HWND hDlg, LPTSTR lpstrMessage )
{
LONG_PTR lResult;
lResult = SendMessage( GetDlgItem( hDlg, IDC_LIST_OUTPUT ), LB_ADDSTRING, 0, (WPARAM)lpstrMessage );
SendMessage( GetDlgItem( hDlg, IDC_LIST_OUTPUT ), LB_SETTOPINDEX,lResult, 0 );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_DisplayStatus"
void MainDialog_DisplayStatus( HWND hDlg, LPTSTR lpstrStatus )
{
if( hDlg == NULL )
return;
HWND hwndItem = GetDlgItem( hDlg, IDC_STATIC_STATUS );
if( hwndItem != NULL )
{
SetWindowText( hwndItem, lpstrStatus );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_DisplayVolumeSettings"
void MainDialog_DisplayVolumeSettings( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
if( hDlg == NULL )
return;
if( prtInfo->dxvParameters.fAGC )
{
CheckDlgButton( hDlg, IDC_CHECK_AGC, BST_CHECKED );
EnableWindow( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), FALSE );
}
else
{
CheckDlgButton( hDlg, IDC_CHECK_AGC, BST_UNCHECKED );
EnableWindow( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), TRUE );
}
if( prtInfo->dxvParameters.fEchoSuppression )
{
CheckDlgButton( hDlg, IDC_CHECK_ES, BST_CHECKED );
}
else
{
CheckDlgButton( hDlg, IDC_CHECK_ES, BST_UNCHECKED );
}
SendMessage( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), TBM_SETPOS, (WPARAM) TRUE, (LPARAM) (((LONG) prtInfo->dxvParameters.lRecordVolume)*((LONG) -1)) );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleESCheck"
void MainDialog_HandleESCheck( HWND hDlg, HWND hwndControl, PDXVHELP_RTINFO prtInfo )
{
DVCLIENTCONFIG dvClientConfig;
dvClientConfig.dwSize = sizeof( DVCLIENTCONFIG );
if( prtInfo->lpdvClient != NULL )
prtInfo->lpdvClient->GetClientConfig( &dvClientConfig );
if( SendMessage( (HWND) hwndControl, BM_GETCHECK, 0, 0 ) == BST_CHECKED )
{
dvClientConfig.dwFlags |= DVCLIENTCONFIG_ECHOSUPPRESSION;
prtInfo->dxvParameters.fEchoSuppression = TRUE;
}
else
{
dvClientConfig.dwFlags &= ~DVCLIENTCONFIG_ECHOSUPPRESSION;
prtInfo->dxvParameters.fEchoSuppression = FALSE;
}
if( prtInfo->lpdvClient != NULL )
prtInfo->lpdvClient->SetClientConfig( &dvClientConfig );
MainDialog_DisplayVolumeSettings( hDlg, prtInfo );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleAGCCheck"
void MainDialog_HandleAGCCheck( HWND hDlg, HWND hwndControl, PDXVHELP_RTINFO prtInfo )
{
DVCLIENTCONFIG dvClientConfig;
dvClientConfig.dwSize = sizeof( DVCLIENTCONFIG );
if( prtInfo->lpdvClient != NULL )
prtInfo->lpdvClient->GetClientConfig( &dvClientConfig );
if( SendMessage( (HWND) hwndControl, BM_GETCHECK, 0, 0 ) == BST_CHECKED )
{
dvClientConfig.dwFlags |= DVCLIENTCONFIG_AUTORECORDVOLUME;
prtInfo->dxvParameters.lRecordVolume = 0;
prtInfo->dxvParameters.fAGC = TRUE;
}
else
{
dvClientConfig.dwFlags &= ~DVCLIENTCONFIG_AUTORECORDVOLUME;
prtInfo->dxvParameters.lRecordVolume = -9000;
prtInfo->dxvParameters.fAGC = FALSE;
}
dvClientConfig.lRecordVolume = prtInfo->dxvParameters.lRecordVolume;
if( prtInfo->lpdvClient != NULL )
prtInfo->lpdvClient->SetClientConfig( &dvClientConfig );
MainDialog_DisplayVolumeSettings( hDlg, prtInfo );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleConnect"
void MainDialog_HandleConnect( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
if( GetConnectSettings( prtInfo->hInst, hDlg, prtInfo->dxvParameters.lpszConnectAddress ) )
{
prtInfo->dxvParameters.fHost = FALSE;
SetEvent( prtInfo->hGo );
EnableWindow( GetDlgItem( hDlg, IDC_BUTTON_CONNECT ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_BUTTON_HOST ), FALSE );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleHost"
void MainDialog_HandleHost( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
if( GetHostSettings( prtInfo->hInst, hDlg, &prtInfo->dxvParameters.guidCT, &prtInfo->dxvParameters.dwSessionType ) )
{
prtInfo->dxvParameters.fHost = TRUE;
SetEvent( prtInfo->hGo );
EnableWindow( GetDlgItem( hDlg, IDC_BUTTON_CONNECT ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_BUTTON_HOST ), FALSE );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleScroll"
void MainDialog_HandleScroll( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
DWORD dwPosition;
DVCLIENTCONFIG dvClientConfig;
dvClientConfig.dwSize = sizeof( DVCLIENTCONFIG );
dwPosition = (DWORD) SendMessage( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), TBM_GETPOS, 0, 0 );
prtInfo->dxvParameters.lRecordVolume = ((LONG) dwPosition) * ((LONG) -1);
if( prtInfo->lpdvClient != NULL )
{
prtInfo->lpdvClient->GetClientConfig( &dvClientConfig );
}
dvClientConfig.lRecordVolume = prtInfo->dxvParameters.lRecordVolume;
if( prtInfo->lpdvClient != NULL )
{
prtInfo->lpdvClient->SetClientConfig( &dvClientConfig );
}
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleClose"
void MainDialog_HandleClose( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
SetEvent( prtInfo->hShutdown );
DestroyWindow( hDlg );
prtInfo->hMainDialog = NULL;
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_SetIdleState"
void MainDialog_SetIdleState( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
if( hDlg == NULL )
return;
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_STATUS ), _T("Idle") );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_CT), _T("N/A") );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_PLAYERS ), _T("0") );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_HOST), _T("N/A") );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE), _T("N/A") );
SendMessage( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG( 0, 10000 ) );
SendMessage( GetDlgItem( hDlg, IDC_SLIDER_RECVOLUME ), TBM_SETTICFREQ, (WPARAM) 2000, (LPARAM) 0 );
SendMessage( GetDlgItem( hDlg, IDC_PROGRESS_TX ), PBM_SETRANGE, (WPARAM) 0, MAKELPARAM( 0, 100 ) );
SendMessage( GetDlgItem( hDlg, IDC_PROGRESS_RX ), PBM_SETRANGE, (WPARAM) 0, MAKELPARAM( 0, 100 ) );
MainDialog_DisplayVolumeSettings( hDlg, prtInfo );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_HandleInitDialog"
void MainDialog_HandleInitDialog( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
MainDialog_SetIdleState( hDlg, prtInfo );
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_Proc"
INT_PTR CALLBACK MainDialog_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
PDXVHELP_RTINFO prtInfo = g_prtInfo;
switch (message)
{
case WM_INITDIALOG:
MainDialog_HandleInitDialog( hDlg, prtInfo );
return TRUE;
case WM_COMMAND:
if( HIWORD( wParam ) == BN_CLICKED &&
LOWORD( wParam ) == IDC_CHECK_AGC )
{
MainDialog_HandleAGCCheck( hDlg, (HWND) lParam, prtInfo );
}
else if( LOWORD( wParam ) == IDC_BUTTON_CONNECT &&
HIWORD( wParam ) == BN_CLICKED )
{
MainDialog_HandleConnect( hDlg, prtInfo );
}
else if( LOWORD( wParam ) == IDC_BUTTON_HOST &&
HIWORD( wParam ) == BN_CLICKED )
{
MainDialog_HandleHost( hDlg, prtInfo );
}
else if( HIWORD( wParam ) == BN_CLICKED &&
LOWORD( wParam ) == IDC_CHECK_ES )
{
MainDialog_HandleESCheck( hDlg, (HWND) lParam, prtInfo );
}
break;
case WM_VSCROLL:
MainDialog_HandleScroll( hDlg, prtInfo );
break;
case WM_CLOSE:
MainDialog_HandleClose( hDlg, prtInfo );
break;
}
return FALSE;
}
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_ShowSessionSettings"
void MainDialog_ShowSessionSettings( HWND hDlg, PDXVHELP_RTINFO prtInfo )
{
DWORD dwSize;
DVSESSIONDESC dvSessionDesc;
HRESULT hr;
GUID guidCT;
dwSize = 0;
dvSessionDesc.dwSize = sizeof( DVSESSIONDESC );
hr = prtInfo->lpdvClient->GetSessionDesc( &dvSessionDesc );
if( hr == DV_OK )
{
guidCT = dvSessionDesc.guidCT;
switch( dvSessionDesc.dwSessionType )
{
case DVSESSIONTYPE_PEER:
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Peer") );
break;
case DVSESSIONTYPE_MIXING:
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Mixing") );
break;
case DVSESSIONTYPE_FORWARDING:
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Forwarding") );
break;
case DVSESSIONTYPE_ECHO:
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Echo"));
break;
default:
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Unknown") );
break;
}
LPTSTR lpstrCTName = NULL;
DWORD dwLength = 0;
hr = DPVDX_GetCompressionName( guidCT, lpstrCTName, &dwLength );
if( hr != DVERR_BUFFERTOOSMALL )
{
DPVDX_DVERRDisplay( hr, _T("GetCompressionName"), FALSE );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_CT ), _T("Unknown") );
}
else
{
lpstrCTName = new TCHAR[dwLength];
hr = DPVDX_GetCompressionName( guidCT, lpstrCTName, &dwLength );
if( FAILED( hr ) )
{
DPVDX_DVERRDisplay( hr, _T("GetCompressionName"), FALSE );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_CT ), _T("Unknown") );
}
else
{
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_CT ), lpstrCTName );
}
delete [] lpstrCTName;
}
}
else
{
DPFX(DPFPREP, DVF_ERRORLEVEL, "Error getting full session settings" );
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_TYPE ), _T("Unknown" ));
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_CT ), _T("Unknown") );
}
if( prtInfo->dxvParameters.fHost )
{
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_HOST ), _T("Local Host") );
}
else
{
SetWindowText( GetDlgItem( hDlg, IDC_STATIC_HOST ), _T("Remote Host") );
}
TCHAR szTmpString[100];
_stprintf( szTmpString, _T("0x%x"), prtInfo->dpidLocalPlayer );
HWND hwndTmp = GetDlgItem( hDlg, IDC_STATIC_ID );
SetWindowText( hwndTmp, szTmpString );
MainDialog_UpdatePlayerList( hDlg, prtInfo );
return;
}
// Show the main dialog box
#undef DPF_MODNAME
#define DPF_MODNAME "MainDialog_Create"
BOOL MainDialog_Create( PDXVHELP_RTINFO prtInfo )
{
HRESULT hr;
g_prtInfo = prtInfo;
prtInfo->hMainDialog = CreateDialog( prtInfo->hInst, (prtInfo->dxvParameters.fLobbyLaunched) ? MAKEINTRESOURCE( IDD_DIALOG_MAIN ) : MAKEINTRESOURCE( IDD_DIALOG_MAIN_STANDALONE ), prtInfo->hMainWnd, MainDialog_Proc );
if( prtInfo->hMainDialog == NULL )
{
hr = GetLastError();
return FALSE;
}
if( prtInfo->dxvParameters.fAdvancedUI )
{
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_PLAYERS_TITLE ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_HOST_TITLE ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_TYPE_TITLE ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_CT_TITLE ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_PLAYERS ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_HOST ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_TYPE ), TRUE );
ShowWindow( GetDlgItem( prtInfo->hMainDialog, IDC_STATIC_CT ), TRUE );
}
ShowWindow( prtInfo->hMainDialog, SW_SHOW );
return TRUE;
}