290 lines
6.8 KiB
C++
290 lines
6.8 KiB
C++
|
/*==========================================================================
|
||
|
*
|
||
|
* Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved.
|
||
|
*
|
||
|
* File: hostdlg.cpp
|
||
|
* Content: Host Dialog Support Routines
|
||
|
* History:
|
||
|
*
|
||
|
* Date By Reason
|
||
|
* ==== == ======
|
||
|
* 10/15/99 rodtoll created it
|
||
|
* rodtoll Plugged memory leak in enumcompressiontypes
|
||
|
* 12/07/99 rodtoll Bug #122628 Make error messages silent when running in silent mode
|
||
|
* 03/03/2000 rodtoll Updated to handle alternative gamevoice build.
|
||
|
* 06/28/2000 rodtoll Prefix Bug #38033,
|
||
|
* 08/31/2000 rodtoll Prefix Bug #171843 - Out of Memory Handling Error
|
||
|
*
|
||
|
***************************************************************************/
|
||
|
|
||
|
#include "dxvhelppch.h"
|
||
|
|
||
|
|
||
|
GUID g_guidCT;
|
||
|
DWORD g_dwSessionType;
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "HostDialog_FillCompressionPulldown"
|
||
|
|
||
|
void HostDialog_FillCompressionPulldown( HWND hDlg )
|
||
|
{
|
||
|
HWND hPulldown = GetDlgItem( hDlg, IDC_COMBO_CT );
|
||
|
|
||
|
LPDVCOMPRESSIONINFO lpdvCompressionInfo;
|
||
|
LPBYTE lpBuffer = NULL;
|
||
|
DWORD dwSize = 0;
|
||
|
DWORD dwNumElements = 0;
|
||
|
HRESULT hr;
|
||
|
LPDIRECTPLAYVOICECLIENT lpdpvClient = NULL;
|
||
|
LRESULT lResultIndex, lFirst;
|
||
|
LPGUID lpGuid = NULL;
|
||
|
|
||
|
hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
|
||
|
|
||
|
if( FAILED( hr ) )
|
||
|
{
|
||
|
DPVDX_DVERRDisplay( hr, "Failure initializing COM", FALSE );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
hr = CoCreateInstance( DPVOICE_CLSID_DPVOICE, NULL, CLSCTX_INPROC_SERVER, IID_IDirectPlayVoiceClient, (void **) &lpdpvClient );
|
||
|
|
||
|
if( FAILED( hr ) )
|
||
|
{
|
||
|
DPVDX_DVERRDisplay( hr, "Unable to create client to get ct info", FALSE );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
hr = lpdpvClient->GetCompressionTypes( lpBuffer, &dwSize, &dwNumElements, 0 );
|
||
|
|
||
|
if( hr != DVERR_BUFFERTOOSMALL )
|
||
|
{
|
||
|
DPVDX_DVERRDisplay( hr, "Unable to to get ct info", FALSE );
|
||
|
lpdpvClient->Release();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
lpBuffer = new BYTE[dwSize];
|
||
|
|
||
|
if( !lpBuffer )
|
||
|
{
|
||
|
DPVDX_DVERRDisplay( DVERR_OUTOFMEMORY, "Failed allocating memory", FALSE );
|
||
|
lpdpvClient->Release();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
hr = lpdpvClient->GetCompressionTypes( lpBuffer, &dwSize, &dwNumElements, 0 );
|
||
|
|
||
|
if( FAILED( hr ) )
|
||
|
{
|
||
|
DPVDX_DVERRDisplay( hr, "Unable to to get ct info", FALSE );
|
||
|
lpdpvClient->Release();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
lpdvCompressionInfo = (LPDVCOMPRESSIONINFO) lpBuffer;
|
||
|
|
||
|
LPSTR lpszName;
|
||
|
|
||
|
for( DWORD dwIndex = 0; dwIndex < dwNumElements; dwIndex++ )
|
||
|
{
|
||
|
if( FAILED( DPVDX_AllocAndConvertToANSI( &lpszName, lpdvCompressionInfo[dwIndex].lpszName ) ) )
|
||
|
{
|
||
|
lResultIndex = SendMessage( hPulldown, CB_ADDSTRING, 0, (LPARAM) "Unable to convert" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
lResultIndex = SendMessage( hPulldown, CB_ADDSTRING, 0, (LPARAM) lpszName );
|
||
|
delete [] lpszName;
|
||
|
}
|
||
|
|
||
|
if( dwIndex == 0 )
|
||
|
lFirst = lResultIndex;
|
||
|
|
||
|
lpGuid = new GUID;
|
||
|
|
||
|
if( lpGuid == NULL )
|
||
|
{
|
||
|
DNASSERT( FALSE );
|
||
|
DPVDX_DVERRDisplay( DVERR_OUTOFMEMORY, "Error allocating memory", FALSE );
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
(*lpGuid) = lpdvCompressionInfo[dwIndex].guidType;
|
||
|
|
||
|
SendMessage( hPulldown, CB_SETITEMDATA, lResultIndex, (LPARAM) lpGuid );
|
||
|
}
|
||
|
|
||
|
delete [] lpBuffer;
|
||
|
|
||
|
// lFirst isn't initialized if we didn't enter the 'for' loop above
|
||
|
if (dwIndex > 0)
|
||
|
{
|
||
|
SendMessage( hPulldown, CB_SETCURSEL, 0, lFirst );
|
||
|
}
|
||
|
|
||
|
lpdpvClient->Release();
|
||
|
|
||
|
CoUninitialize();
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "HostDialog_FillSessionTypePulldown"
|
||
|
|
||
|
void HostDialog_FillSessionTypePulldown( HWND hDlg )
|
||
|
{
|
||
|
HWND hPulldown = GetDlgItem( hDlg, IDC_COMBO_TYPE );
|
||
|
|
||
|
LRESULT lIndex, lFirst;
|
||
|
|
||
|
lFirst = SendMessage( hPulldown, CB_ADDSTRING, 0, (DWORD_PTR) "Peer To Peer" );
|
||
|
SendMessage( hPulldown, CB_SETITEMDATA, lFirst, DVSESSIONTYPE_PEER );
|
||
|
|
||
|
lIndex = SendMessage( hPulldown, CB_ADDSTRING, 0, (DWORD_PTR) "Mixing" );
|
||
|
SendMessage( hPulldown, CB_SETITEMDATA, lIndex, DVSESSIONTYPE_MIXING );
|
||
|
|
||
|
lIndex = SendMessage( hPulldown, CB_ADDSTRING, 0, (DWORD_PTR) "Multicast" );
|
||
|
SendMessage( hPulldown, CB_SETITEMDATA, lIndex, DVSESSIONTYPE_FORWARDING );
|
||
|
|
||
|
lIndex = SendMessage( hPulldown, CB_ADDSTRING, 0, (DWORD_PTR) "Echo" );
|
||
|
SendMessage( hPulldown, CB_SETITEMDATA, lIndex, DVSESSIONTYPE_ECHO );
|
||
|
|
||
|
SendMessage( hPulldown, CB_SETCURSEL, 0, lFirst );
|
||
|
}
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "CleanupCompressionGUIDs"
|
||
|
void CleanupCompressionGUIDs( HWND hDlg )
|
||
|
{
|
||
|
LRESULT lCurSelection;
|
||
|
LPGUID lpguidCT;
|
||
|
|
||
|
lCurSelection = SendMessage( GetDlgItem( hDlg, IDC_COMBO_CT ), CB_GETCOUNT, 0, 0 );
|
||
|
|
||
|
if( lCurSelection != CB_ERR )
|
||
|
{
|
||
|
for( LRESULT lIndex = 0; lIndex < lCurSelection; lIndex++ )
|
||
|
{
|
||
|
lpguidCT = (LPGUID) SendMessage( GetDlgItem( hDlg, IDC_COMBO_CT ), CB_GETITEMDATA, lIndex, 0 );
|
||
|
|
||
|
if( lpguidCT )
|
||
|
delete lpguidCT;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "HostDialog_HandleCommandCancel"
|
||
|
|
||
|
BOOL HostDialog_HandleCommandCancel( HWND hDlg )
|
||
|
{
|
||
|
CleanupCompressionGUIDs( hDlg );
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "HostDialog_HandleCommandOK"
|
||
|
|
||
|
BOOL HostDialog_HandleCommandOK( HWND hDlg )
|
||
|
{
|
||
|
LRESULT lCurSelection;
|
||
|
LPGUID lpguidCT;
|
||
|
|
||
|
PDXVHELP_RTINFO prtInfo = (PDXVHELP_RTINFO) GetWindowLongPtr( hDlg, DWLP_USER );
|
||
|
|
||
|
lCurSelection = SendMessage( GetDlgItem( hDlg, IDC_COMBO_CT ), CB_GETCURSEL, 0, 0 );
|
||
|
|
||
|
if( lCurSelection == CB_ERR )
|
||
|
{
|
||
|
MessageBox( NULL, "Select a compression type!", "Error", MB_OK );
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
lpguidCT = (LPGUID) SendMessage( GetDlgItem( hDlg, IDC_COMBO_CT ), CB_GETITEMDATA, lCurSelection, 0 );
|
||
|
|
||
|
if( lpguidCT != NULL )
|
||
|
{
|
||
|
g_guidCT = (*lpguidCT);
|
||
|
}
|
||
|
|
||
|
CleanupCompressionGUIDs( hDlg );
|
||
|
|
||
|
lCurSelection = SendMessage( GetDlgItem( hDlg, IDC_COMBO_TYPE ), CB_GETCURSEL, 0, 0 );
|
||
|
|
||
|
if( lCurSelection == CB_ERR )
|
||
|
{
|
||
|
MessageBox( NULL, "Select a session type!", "Error", MB_OK );
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
g_dwSessionType = (DWORD) SendMessage( GetDlgItem( hDlg, IDC_COMBO_TYPE ), CB_GETITEMDATA, lCurSelection, 0 );
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "HostDialog_WinProc"
|
||
|
|
||
|
INT_PTR CALLBACK HostDialog_WinProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (message)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
|
||
|
HostDialog_FillCompressionPulldown( hDlg );
|
||
|
HostDialog_FillSessionTypePulldown( hDlg );
|
||
|
|
||
|
return TRUE;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
|
||
|
if (LOWORD(wParam) == IDOK )
|
||
|
{
|
||
|
if( !HostDialog_HandleCommandOK( hDlg ) )
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
else if( LOWORD(wParam) == IDCANCEL )
|
||
|
{
|
||
|
HostDialog_HandleCommandCancel( hDlg );
|
||
|
}
|
||
|
|
||
|
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||
|
{
|
||
|
EndDialog(hDlg, LOWORD(wParam));
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
#undef DPF_MODNAME
|
||
|
#define DPF_MODNAME "GetHostSettings"
|
||
|
|
||
|
BOOL GetHostSettings( HINSTANCE hInst, HWND hOwner, LPGUID pguidCT, PDWORD pdwSessionType )
|
||
|
{
|
||
|
g_dwSessionType = *pdwSessionType;
|
||
|
g_guidCT = *pguidCT;
|
||
|
|
||
|
if( DialogBox( hInst, MAKEINTRESOURCE( IDD_DIALOG_HOST ), hOwner, HostDialog_WinProc ) == IDOK )
|
||
|
{
|
||
|
*pdwSessionType = g_dwSessionType;
|
||
|
*pguidCT = g_guidCT;
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
}
|