|
|
/*==========================================================================
* * 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; }
|