764 lines
20 KiB
C
764 lines
20 KiB
C
|
//==========================================================================;
|
||
|
//
|
||
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||
|
// PURPOSE.
|
||
|
//
|
||
|
// Copyright (c) 1992 - 1994 Microsoft Corporation. All Rights Reserved.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// aawavdev.c
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//==========================================================================;
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include <mmsystem.h>
|
||
|
#include <memory.h>
|
||
|
|
||
|
#include <mmreg.h>
|
||
|
#include <msacm.h>
|
||
|
|
||
|
#include "appport.h"
|
||
|
#include "acmapp.h"
|
||
|
|
||
|
#include "debug.h"
|
||
|
|
||
|
|
||
|
//
|
||
|
// WAVE[IN|OUT]CAPS
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
PTSTR gaszWaveInOutCapsFormats[32] =
|
||
|
{
|
||
|
TEXT("8M11"), // Bit 0 WAVE_FORMAT_1M08
|
||
|
TEXT("8S11"), // Bit 1 WAVE_FORMAT_1S08
|
||
|
TEXT("16M11"), // Bit 2 WAVE_FORMAT_1M16
|
||
|
TEXT("16S11"), // Bit 3 WAVE_FORMAT_1S16
|
||
|
TEXT("8M22"), // Bit 4 WAVE_FORMAT_2M08
|
||
|
TEXT("8S22"), // Bit 5 WAVE_FORMAT_2S08
|
||
|
TEXT("16M22"), // Bit 6 WAVE_FORMAT_2M16
|
||
|
TEXT("16S22"), // Bit 7 WAVE_FORMAT_2S16
|
||
|
TEXT("8M44"), // Bit 8 WAVE_FORMAT_4M08
|
||
|
TEXT("8S44"), // Bit 9 WAVE_FORMAT_4S08
|
||
|
TEXT("16M44"), // Bit 10 WAVE_FORMAT_4M16
|
||
|
TEXT("16S44"), // Bit 11 WAVE_FORMAT_4S16
|
||
|
NULL, // Bit 12
|
||
|
NULL, // Bit 13
|
||
|
NULL, // Bit 14
|
||
|
NULL, // Bit 15
|
||
|
NULL, // Bit 16
|
||
|
NULL, // Bit 17
|
||
|
NULL, // Bit 18
|
||
|
NULL, // Bit 19
|
||
|
NULL, // Bit 20
|
||
|
NULL, // Bit 21
|
||
|
NULL, // Bit 22
|
||
|
NULL, // Bit 23
|
||
|
NULL, // Bit 24
|
||
|
NULL, // Bit 25
|
||
|
NULL, // Bit 26
|
||
|
NULL, // Bit 27
|
||
|
NULL, // Bit 28
|
||
|
NULL, // Bit 29
|
||
|
NULL, // Bit 30
|
||
|
NULL // Bit 31
|
||
|
};
|
||
|
|
||
|
PTSTR gaszWaveOutCapsSupport[32] =
|
||
|
{
|
||
|
TEXT("Pitch"), // Bit 0 WAVECAPS_PITCH
|
||
|
TEXT("Playback Rate"), // Bit 1 WAVECAPS_PLAYBACKRATE
|
||
|
TEXT("Volume"), // Bit 2 WAVECAPS_VOLUME
|
||
|
TEXT("L/R Volume"), // Bit 3 WAVECAPS_LRVOLUME
|
||
|
TEXT("Sync"), // Bit 4 WAVECAPS_SYNC
|
||
|
NULL, // Bit 5
|
||
|
NULL, // Bit 6
|
||
|
NULL, // Bit 7
|
||
|
NULL, // Bit 8
|
||
|
NULL, // Bit 9
|
||
|
NULL, // Bit 10
|
||
|
NULL, // Bit 11
|
||
|
NULL, // Bit 12
|
||
|
NULL, // Bit 13
|
||
|
NULL, // Bit 14
|
||
|
NULL, // Bit 15
|
||
|
NULL, // Bit 16
|
||
|
NULL, // Bit 17
|
||
|
NULL, // Bit 18
|
||
|
NULL, // Bit 19
|
||
|
NULL, // Bit 20
|
||
|
NULL, // Bit 21
|
||
|
NULL, // Bit 22
|
||
|
NULL, // Bit 23
|
||
|
NULL, // Bit 24
|
||
|
NULL, // Bit 25
|
||
|
NULL, // Bit 26
|
||
|
NULL, // Bit 27
|
||
|
NULL, // Bit 28
|
||
|
NULL, // Bit 29
|
||
|
NULL, // Bit 30
|
||
|
NULL // Bit 31
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//==========================================================================;
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//==========================================================================;
|
||
|
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// MMRESULT AcmAppWaveInGetDevCaps
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Arguments:
|
||
|
// UINT uDevId:
|
||
|
//
|
||
|
// LPWAVEINCAPS pwic:
|
||
|
//
|
||
|
// Return (MMRESULT):
|
||
|
//
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
|
||
|
MMRESULT FNLOCAL AcmAppWaveInGetDevCaps
|
||
|
(
|
||
|
UINT uDevId,
|
||
|
LPWAVEINCAPS pwic
|
||
|
)
|
||
|
{
|
||
|
MMRESULT mmr;
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
mmr = waveInGetDevCaps(uDevId, pwic, sizeof(*pwic));
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
//
|
||
|
// because some people shipped drivers without testing.
|
||
|
//
|
||
|
pwic->szPname[SIZEOF(pwic->szPname) - 1] = '\0';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_fmemset(pwic, 0, sizeof(*pwic));
|
||
|
|
||
|
if (MMSYSERR_BADDEVICEID == mmr)
|
||
|
{
|
||
|
return (mmr);
|
||
|
}
|
||
|
|
||
|
if (WAVE_MAPPER == uDevId)
|
||
|
{
|
||
|
lstrcpy(pwic->szPname, TEXT("Default Wave Input Mapper"));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
wsprintf(pwic->szPname, TEXT("Bad Wave Input Device %u"), uDevId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (MMSYSERR_NOERROR);
|
||
|
} // AcmAppWaveInGetDevCaps()
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// MMRESULT AcmAppWaveOutGetDevCaps
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Arguments:
|
||
|
// UINT uDevId:
|
||
|
//
|
||
|
// LPWAVEOUTCAPS pwoc:
|
||
|
//
|
||
|
// Return (MMRESULT):
|
||
|
//
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
|
||
|
MMRESULT FNLOCAL AcmAppWaveOutGetDevCaps
|
||
|
(
|
||
|
UINT uDevId,
|
||
|
LPWAVEOUTCAPS pwoc
|
||
|
)
|
||
|
{
|
||
|
MMRESULT mmr;
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
mmr = waveOutGetDevCaps(uDevId, pwoc, sizeof(*pwoc));
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
//
|
||
|
// because some people shipped drivers without testing.
|
||
|
//
|
||
|
pwoc->szPname[SIZEOF(pwoc->szPname) - 1] = '\0';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_fmemset(pwoc, 0, sizeof(*pwoc));
|
||
|
|
||
|
if (MMSYSERR_BADDEVICEID == mmr)
|
||
|
{
|
||
|
return (mmr);
|
||
|
}
|
||
|
|
||
|
if (WAVE_MAPPER == uDevId)
|
||
|
{
|
||
|
lstrcpy(pwoc->szPname, TEXT("Default Wave Output Mapper"));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
wsprintf(pwoc->szPname, TEXT("Bad Wave Output Device %u"), uDevId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (MMSYSERR_NOERROR);
|
||
|
} // AcmAppWaveOutGetDevCaps()
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// BOOL AcmAppDisplayWaveInDevCaps
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Arguments:
|
||
|
// HWND hedit:
|
||
|
//
|
||
|
// UINT uDevId:
|
||
|
//
|
||
|
// LPWAVEINCAPS pwic:
|
||
|
//
|
||
|
// Return (BOOL):
|
||
|
//
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
|
||
|
BOOL FNLOCAL AcmAppDisplayWaveInDevCaps
|
||
|
(
|
||
|
HWND hedit,
|
||
|
UINT uDevId,
|
||
|
LPWAVEINCAPS pwic,
|
||
|
LPWAVEFORMATEX pwfx
|
||
|
)
|
||
|
{
|
||
|
static TCHAR szDisplayTitle[] = TEXT("[Wave Input Device Capabilities]\r\n");
|
||
|
TCHAR ach[40];
|
||
|
PTSTR psz;
|
||
|
UINT u;
|
||
|
UINT v;
|
||
|
DWORD dw;
|
||
|
|
||
|
SetWindowRedraw(hedit, FALSE);
|
||
|
|
||
|
MEditPrintF(hedit, NULL);
|
||
|
MEditPrintF(hedit, szDisplayTitle);
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
if (NULL != pwfx)
|
||
|
{
|
||
|
TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
|
||
|
TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
|
||
|
MMRESULT mmr;
|
||
|
HWAVEIN hwi;
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
AcmAppGetFormatDescription(pwfx, szFormatTag, szFormat);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %s"), (LPTSTR)TEXT("Format"), (LPTSTR)szFormatTag);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %s"), (LPTSTR)TEXT("Attributes"), (LPTSTR)szFormat);
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("~%17s: "), (LPTSTR)TEXT("Recordable"));
|
||
|
mmr = waveInOpen(&hwi, uDevId,
|
||
|
#if (WINVER < 0x0400)
|
||
|
(LPWAVEFORMAT)pwfx,
|
||
|
#else
|
||
|
pwfx,
|
||
|
#endif
|
||
|
0L, 0L, 0L);
|
||
|
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszYes);
|
||
|
waveInClose(hwi);
|
||
|
hwi = NULL;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppGetErrorString(mmr, ach);
|
||
|
MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr);
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("~%17s: "), (LPTSTR)TEXT("(Query)"));
|
||
|
mmr = waveInOpen(NULL, uDevId,
|
||
|
#if (WINVER < 0x0400)
|
||
|
(LPWAVEFORMAT)pwfx,
|
||
|
#else
|
||
|
pwfx,
|
||
|
#endif
|
||
|
0L, 0L, WAVE_FORMAT_QUERY);
|
||
|
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszYes);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppGetErrorString(mmr, ach);
|
||
|
MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr);
|
||
|
}
|
||
|
|
||
|
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("%17s: %d"), (LPTSTR)TEXT("Device Id"), uDevId);
|
||
|
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Manufacturer Id"), pwic->wMid);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Product Id"), pwic->wPid);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u.%.02u"), (LPTSTR)TEXT("Driver Version"),
|
||
|
(pwic->vDriverVersion >> 8),
|
||
|
(pwic->vDriverVersion & 0x00FF));
|
||
|
MEditPrintF(hedit, TEXT("%17s: '%s'"), (LPTSTR)TEXT("Device Name"), (LPTSTR)pwic->szPname);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Channels"), pwic->wChannels);
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("%17s: %.08lXh"), (LPTSTR)TEXT("Standard Formats"), pwic->dwFormats);
|
||
|
for (v = u = 0, dw = pwic->dwFormats; (0L != dw); u++)
|
||
|
{
|
||
|
if ((BYTE)dw & (BYTE)1)
|
||
|
{
|
||
|
psz = gaszWaveInOutCapsFormats[u];
|
||
|
if (NULL == psz)
|
||
|
{
|
||
|
wsprintf(ach, TEXT("Unknown%u"), u);
|
||
|
psz = ach;
|
||
|
}
|
||
|
|
||
|
if (0 == (v % 4))
|
||
|
{
|
||
|
if (v != 0)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
}
|
||
|
MEditPrintF(hedit, TEXT("~%19s%s"), (LPTSTR)gszNull, (LPTSTR)psz);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MEditPrintF(hedit, TEXT("~, %s"), (LPTSTR)psz);
|
||
|
}
|
||
|
|
||
|
v++;
|
||
|
}
|
||
|
|
||
|
dw >>= 1;
|
||
|
}
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
|
||
|
SetWindowRedraw(hedit, TRUE);
|
||
|
|
||
|
return (TRUE);
|
||
|
} // AcmAppDisplayWaveInDevCaps()
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// BOOL AcmAppDisplayWaveOutDevCaps
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Arguments:
|
||
|
// HWND hedit:
|
||
|
//
|
||
|
// UINT uDevId:
|
||
|
//
|
||
|
// LPWAVEOUTCAPS pwoc:
|
||
|
//
|
||
|
// Return (BOOL):
|
||
|
//
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
|
||
|
BOOL FNLOCAL AcmAppDisplayWaveOutDevCaps
|
||
|
(
|
||
|
HWND hedit,
|
||
|
UINT uDevId,
|
||
|
LPWAVEOUTCAPS pwoc,
|
||
|
LPWAVEFORMATEX pwfx
|
||
|
)
|
||
|
{
|
||
|
static TCHAR szDisplayTitle[] = TEXT("[Wave Output Device Capabilities]\r\n");
|
||
|
TCHAR ach[40];
|
||
|
PTSTR psz;
|
||
|
UINT u;
|
||
|
UINT v;
|
||
|
DWORD dw;
|
||
|
|
||
|
SetWindowRedraw(hedit, FALSE);
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, NULL);
|
||
|
MEditPrintF(hedit, szDisplayTitle);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
if (NULL != pwfx)
|
||
|
{
|
||
|
TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
|
||
|
TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
|
||
|
MMRESULT mmr;
|
||
|
HWAVEOUT hwo;
|
||
|
DWORD fdwOpen;
|
||
|
|
||
|
fdwOpen = (0 != (WAVECAPS_SYNC & pwoc->dwSupport)) ? 0L : WAVE_ALLOWSYNC;
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
AcmAppGetFormatDescription(pwfx, szFormatTag, szFormat);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %s"), (LPTSTR)TEXT("Format"), (LPTSTR)szFormatTag);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %s"), (LPTSTR)TEXT("Attributes"), (LPTSTR)szFormat);
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("~%17s: "), (LPTSTR)TEXT("Playable"));
|
||
|
mmr = waveOutOpen(&hwo, uDevId,
|
||
|
#if (WINVER < 0x0400)
|
||
|
(LPWAVEFORMAT)pwfx,
|
||
|
#else
|
||
|
pwfx,
|
||
|
#endif
|
||
|
0L, 0L, fdwOpen);
|
||
|
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszYes);
|
||
|
waveOutClose(hwo);
|
||
|
hwo = NULL;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppGetErrorString(mmr, ach);
|
||
|
MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("~%17s: "), (LPTSTR)TEXT("(Query)"));
|
||
|
mmr = waveOutOpen(NULL, uDevId,
|
||
|
#if (WINVER < 0x0400)
|
||
|
(LPWAVEFORMAT)pwfx,
|
||
|
#else
|
||
|
pwfx,
|
||
|
#endif
|
||
|
0L, 0L, fdwOpen | WAVE_FORMAT_QUERY);
|
||
|
|
||
|
if (MMSYSERR_NOERROR == mmr)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszYes);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppGetErrorString(mmr, ach);
|
||
|
MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr);
|
||
|
}
|
||
|
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
MEditPrintF(hedit, TEXT("%17s: %d"), (LPTSTR)TEXT("Device Id"), uDevId);
|
||
|
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Manufacturer Id"), pwoc->wMid);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Product Id"), pwoc->wPid);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u.%.02u"), (LPTSTR)TEXT("Driver Version"),
|
||
|
(pwoc->vDriverVersion >> 8),
|
||
|
(pwoc->vDriverVersion & 0x00FF));
|
||
|
MEditPrintF(hedit, TEXT("%17s: '%s'"), (LPTSTR)TEXT("Device Name"), (LPTSTR)pwoc->szPname);
|
||
|
MEditPrintF(hedit, TEXT("%17s: %u"), (LPTSTR)TEXT("Channels"), pwoc->wChannels);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("%17s: %.08lXh"), (LPTSTR)TEXT("Standard Formats"), pwoc->dwFormats);
|
||
|
for (v = u = 0, dw = pwoc->dwFormats; (0L != dw); u++)
|
||
|
{
|
||
|
if ((BYTE)dw & (BYTE)1)
|
||
|
{
|
||
|
psz = gaszWaveInOutCapsFormats[u];
|
||
|
if (NULL == psz)
|
||
|
{
|
||
|
wsprintf(ach, TEXT("Unknown%u"), u);
|
||
|
psz = ach;
|
||
|
}
|
||
|
|
||
|
if (0 == (v % 4))
|
||
|
{
|
||
|
if (v != 0)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
}
|
||
|
MEditPrintF(hedit, TEXT("~%19s%s"), (LPTSTR)gszNull, (LPTSTR)psz);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MEditPrintF(hedit, TEXT("~, %s"), (LPTSTR)psz);
|
||
|
}
|
||
|
|
||
|
v++;
|
||
|
}
|
||
|
|
||
|
dw >>= 1;
|
||
|
}
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
MEditPrintF(hedit, TEXT("%17s: %.08lXh"), (LPTSTR)TEXT("Standard Support"), pwoc->dwSupport);
|
||
|
for (v = u = 0, dw = pwoc->dwSupport; dw; u++)
|
||
|
{
|
||
|
if ((BYTE)dw & (BYTE)1)
|
||
|
{
|
||
|
psz = gaszWaveOutCapsSupport[u];
|
||
|
if (NULL == psz)
|
||
|
{
|
||
|
wsprintf(ach, TEXT("Unknown%u"), u);
|
||
|
psz = ach;
|
||
|
}
|
||
|
|
||
|
if (0 == (v % 4))
|
||
|
{
|
||
|
if (v != 0)
|
||
|
{
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
}
|
||
|
MEditPrintF(hedit, TEXT("~%19s%s"), (LPTSTR)gszNull, (LPTSTR)psz);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MEditPrintF(hedit, TEXT("~, %s"), (LPTSTR)psz);
|
||
|
}
|
||
|
|
||
|
v++;
|
||
|
}
|
||
|
|
||
|
dw >>= 1;
|
||
|
}
|
||
|
MEditPrintF(hedit, gszNull);
|
||
|
|
||
|
SetWindowRedraw(hedit, TRUE);
|
||
|
|
||
|
return (TRUE);
|
||
|
} // AcmAppDisplayWaveOutDevCaps()
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------;
|
||
|
//
|
||
|
// BOOL AcmAppWaveDeviceDlgProc
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Arguments:
|
||
|
// HWND hwnd:
|
||
|
//
|
||
|
// UINT uMsg:
|
||
|
//
|
||
|
// WPARAM wParam:
|
||
|
//
|
||
|
// LPARAM lParam:
|
||
|
//
|
||
|
// Return (BOOL):
|
||
|
//
|
||
|
//
|
||
|
//--------------------------------------------------------------------------;
|
||
|
|
||
|
BOOL FNEXPORT AcmAppWaveDeviceDlgProc
|
||
|
(
|
||
|
HWND hwnd,
|
||
|
UINT uMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
LONG lDevice;
|
||
|
BOOL fInput;
|
||
|
UINT uDevId;
|
||
|
|
||
|
UINT cWaveDevs;
|
||
|
UINT u;
|
||
|
UINT uId;
|
||
|
UINT uCmd;
|
||
|
HWND hcb;
|
||
|
HWND hedit;
|
||
|
HFONT hfont;
|
||
|
|
||
|
WAVEINCAPS wic;
|
||
|
WAVEOUTCAPS woc;
|
||
|
|
||
|
lDevice = GetWindowLong(hwnd, DWL_USER);
|
||
|
uDevId = (UINT)(int)(short)LOWORD(lDevice);
|
||
|
fInput = (BOOL)HIWORD(lDevice);
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
// hfont = GetStockFont(ANSI_FIXED_FONT);
|
||
|
hfont = ghfontApp;
|
||
|
hedit = GetDlgItem(hwnd, IDD_AAWAVEDEVICE_EDIT_CAPABILITIES);
|
||
|
SetWindowFont(hedit, hfont, FALSE);
|
||
|
|
||
|
uDevId = (UINT)(int)(short)LOWORD(lParam);
|
||
|
fInput = (BOOL)HIWORD(lParam);
|
||
|
SetWindowLong(hwnd, DWL_USER, lParam);
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
hcb = GetDlgItem(hwnd, IDD_AAWAVEDEVICE_COMBO_DEVICE);
|
||
|
SetWindowFont(hcb, hfont, FALSE);
|
||
|
|
||
|
if (fInput)
|
||
|
cWaveDevs = waveInGetNumDevs() + 1;
|
||
|
else
|
||
|
cWaveDevs = waveOutGetNumDevs() + 1;
|
||
|
|
||
|
for (u = (UINT)WAVE_MAPPER; (0 != cWaveDevs); u++, cWaveDevs--)
|
||
|
{
|
||
|
if (fInput)
|
||
|
{
|
||
|
AcmAppWaveInGetDevCaps(u, &wic);
|
||
|
ComboBox_AddString(hcb, wic.szPname);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppWaveOutGetDevCaps(u, &woc);
|
||
|
ComboBox_AddString(hcb, woc.szPname);
|
||
|
}
|
||
|
|
||
|
if (uDevId == u)
|
||
|
{
|
||
|
hedit = GetDlgItem(hwnd, IDD_AAWAVEDEVICE_EDIT_CAPABILITIES);
|
||
|
|
||
|
if (fInput)
|
||
|
AcmAppDisplayWaveInDevCaps(hedit, uDevId, &wic, gaafd.pwfx);
|
||
|
else
|
||
|
AcmAppDisplayWaveOutDevCaps(hedit, uDevId, &woc, gaafd.pwfx);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ComboBox_SetCurSel(hcb, uDevId + 1);
|
||
|
return (TRUE);
|
||
|
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
uId = GET_WM_COMMAND_ID(wParam, lParam);
|
||
|
|
||
|
switch (uId)
|
||
|
{
|
||
|
case IDOK:
|
||
|
hcb = GetDlgItem(hwnd, IDD_AAWAVEDEVICE_COMBO_DEVICE);
|
||
|
uDevId = ComboBox_GetCurSel(hcb);
|
||
|
if (CB_ERR != uDevId)
|
||
|
{
|
||
|
EndDialog(hwnd, uDevId - 1);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// -- fall through -- //
|
||
|
|
||
|
case IDCANCEL:
|
||
|
EndDialog(hwnd, uDevId);
|
||
|
break;
|
||
|
|
||
|
|
||
|
case IDD_AAWAVEDEVICE_COMBO_DEVICE:
|
||
|
uCmd = GET_WM_COMMAND_CMD(wParam, lParam);
|
||
|
hcb = GET_WM_COMMAND_HWND(wParam, lParam);
|
||
|
switch (uCmd)
|
||
|
{
|
||
|
case CBN_SELCHANGE:
|
||
|
uDevId = ComboBox_GetCurSel(hcb);
|
||
|
if (CB_ERR == uDevId)
|
||
|
break;
|
||
|
|
||
|
uDevId--;
|
||
|
|
||
|
hedit = GetDlgItem(hwnd, IDD_AAWAVEDEVICE_EDIT_CAPABILITIES);
|
||
|
if (fInput)
|
||
|
{
|
||
|
AcmAppWaveInGetDevCaps(uDevId, &wic);
|
||
|
AcmAppDisplayWaveInDevCaps(hedit, uDevId, &wic, gaafd.pwfx);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AcmAppWaveOutGetDevCaps(uDevId, &woc);
|
||
|
AcmAppDisplayWaveOutDevCaps(hedit, uDevId, &woc, gaafd.pwfx);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
return (FALSE);
|
||
|
} // AcmAppWaveDeviceDlgProc()
|