mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1366 lines
39 KiB
1366 lines
39 KiB
//==========================================================================;
|
|
//
|
|
// 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.
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// aadrvs.c
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
//
|
|
//==========================================================================;
|
|
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <mmsystem.h>
|
|
#include <mmreg.h>
|
|
#include <msacm.h>
|
|
#include <memory.h>
|
|
#include "tlb.h"
|
|
|
|
#include "appport.h"
|
|
#include "acmapp.h"
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
TCHAR gszFormatDriversTitle[] = TEXT("Id\t4!Name\t12!Priority\t6!Support\t6!Full Name");
|
|
TCHAR gszFormatDriversList[] = TEXT("%.04Xh\t%s\t%lu%s\t%.08lXh\t%s");
|
|
|
|
TCHAR gszFormatDriverFormatsTitle[] = TEXT("Id\t4!Index\t2!Tag\t2!Support\t5!cbwfx\t2!Format");
|
|
TCHAR gszFormatDriverFormatsList[] = TEXT("%.04Xh\t%lu\t%lu\t%.08lXh\t%u\t%-s");
|
|
|
|
static HACMDRIVERID ghadidSelected;
|
|
static HACMDRIVER ghadSelected;
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDisplayDriverDetails
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hedit:
|
|
//
|
|
// HACMDRIVER had:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNLOCAL AcmAppDisplayDriverDetails
|
|
(
|
|
HWND hedit,
|
|
HACMDRIVERID hadid
|
|
)
|
|
{
|
|
static TCHAR szDisplayTitle[] = TEXT("[Driver Details]\r\n");
|
|
|
|
MMRESULT mmr;
|
|
ACMDRIVERDETAILS add;
|
|
|
|
//
|
|
//
|
|
//
|
|
MEditPrintF(hedit, szDisplayTitle);
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %.04Xh"), (LPTSTR)TEXT("Driver Identifier Handle"), hadid);
|
|
|
|
//
|
|
//
|
|
//
|
|
//
|
|
add.cbStruct = sizeof(add);
|
|
mmr = acmDriverDetails(hadid, &add, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
//
|
|
// this should never happen..
|
|
//
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("ERROR GETTING DRIVER DETAILS"), mmr);
|
|
return (FALSE);
|
|
}
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
//
|
|
MEditPrintF(hedit, TEXT("%25s: %lu bytes (requested %lu)"),
|
|
(LPTSTR)TEXT("Size of Driver Details"),
|
|
add.cbStruct, (DWORD)sizeof(add));
|
|
|
|
//
|
|
// this would be bad
|
|
//
|
|
if (add.cbStruct < sizeof(add))
|
|
return (0L);
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh (%s)"), (LPTSTR)TEXT("FCC Type"),
|
|
add.fccType,
|
|
(ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC == add.fccType) ?
|
|
(LPTSTR)TEXT("'audc'") : (LPTSTR)TEXT("**INVALID**"));
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh (%s)"), (LPTSTR)TEXT("FCC Compressor"),
|
|
add.fccComp,
|
|
(ACMDRIVERDETAILS_FCCCOMP_UNDEFINED == add.fccComp) ?
|
|
(LPTSTR)TEXT("correct") : (LPTSTR)TEXT("**INVALID**"));
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Manufacturer Id"), add.wMid);
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Product Id"), add.wPid);
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %u.%.02u (Build %.03u)"), (LPTSTR)TEXT("ACM Version Required"),
|
|
HIWORD(add.vdwACM) >> 8,
|
|
HIWORD(add.vdwACM) & 0x00FF,
|
|
LOWORD(add.vdwACM));
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %u.%.02u (Build %.03u)"), (LPTSTR)TEXT("CODEC Version"),
|
|
HIWORD(add.vdwDriver) >> 8,
|
|
HIWORD(add.vdwDriver) & 0x00FF,
|
|
LOWORD(add.vdwDriver));
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("Standard Support"), add.fdwSupport);
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Count Format Tags"), add.cFormatTags);
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Count Filter Tags"), add.cFilterTags);
|
|
MEditPrintF(hedit, TEXT("%25s: %.04Xh"), (LPTSTR)TEXT("Custom Icon Handle"), add.hicon);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Short Name"), (LPTSTR)add.szShortName);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Long Name"), (LPTSTR)add.szLongName);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Copyright"), (LPTSTR)add.szCopyright);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Licensing"), (LPTSTR)add.szLicensing);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'\r\n"), (LPTSTR)TEXT("Features"), (LPTSTR)add.szFeatures);
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
if (0 != (ACMDRIVERDETAILS_SUPPORTF_HARDWARE & add.fdwSupport))
|
|
{
|
|
TCHAR ach[40];
|
|
DWORD dw;
|
|
|
|
mmr = acmMetrics((HACMOBJ)hadid, ACM_METRIC_HARDWARE_WAVE_INPUT, &dw);
|
|
AcmAppGetErrorString(mmr, ach);
|
|
MEditPrintF(hedit, TEXT("%25s: %ld (mmr = %s, [%u])"), (LPTSTR)TEXT("Wave Input Device"), dw, (LPTSTR)ach, mmr);
|
|
|
|
mmr = acmMetrics((HACMOBJ)hadid, ACM_METRIC_HARDWARE_WAVE_OUTPUT, &dw);
|
|
AcmAppGetErrorString(mmr, ach);
|
|
MEditPrintF(hedit, TEXT("%25s: %ld (mmr = %s, [%u])"), (LPTSTR)TEXT("Wave Output Device"), dw, (LPTSTR)ach, mmr);
|
|
}
|
|
|
|
return (TRUE);
|
|
} // AcmAppDisplayDriverDetails()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDisplayFormats
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hedit:
|
|
//
|
|
// HACMDRIVER had:
|
|
//
|
|
// ACMFORMATTAGDETAILS paftd:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNLOCAL AcmAppDisplayFormats
|
|
(
|
|
HWND hedit,
|
|
HACMDRIVER had,
|
|
LPACMFORMATTAGDETAILS paftd
|
|
)
|
|
{
|
|
MMRESULT mmr;
|
|
UINT u;
|
|
ACMFORMATDETAILS afd;
|
|
PWAVEFORMATEX pwfx;
|
|
|
|
if (0 == paftd->cStandardFormats)
|
|
return (TRUE);
|
|
|
|
pwfx = (PWAVEFORMATEX)LocalAlloc(LPTR, (UINT)paftd->cbFormatSize);
|
|
if (NULL == pwfx)
|
|
return (FALSE);
|
|
|
|
//
|
|
//
|
|
//
|
|
//
|
|
for (u = 0; u < paftd->cStandardFormats; u++)
|
|
{
|
|
afd.cbStruct = sizeof(afd);
|
|
afd.dwFormatIndex = u;
|
|
afd.dwFormatTag = paftd->dwFormatTag;
|
|
afd.fdwSupport = 0L;
|
|
afd.pwfx = pwfx;
|
|
afd.cbwfx = paftd->cbFormatSize;
|
|
afd.szFormat[0] = '\0';
|
|
|
|
mmr = acmFormatDetails(had, &afd, ACM_FORMATDETAILSF_INDEX);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
//
|
|
// this should never happen..
|
|
//
|
|
MEditPrintF(hedit, TEXT("%25s: err = %.04Xh"), (LPTSTR)TEXT("ERROR GETTING FORMAT DETAILS"), mmr);
|
|
continue;
|
|
}
|
|
|
|
|
|
//
|
|
// this would be bad
|
|
//
|
|
if (afd.cbStruct < sizeof(afd))
|
|
{
|
|
MEditPrintF(hedit, TEXT("%25s: %lu bytes (requested %lu)"), (LPTSTR)TEXT("Size of Format Details"),
|
|
afd.cbStruct, (DWORD)sizeof(afd));
|
|
continue;
|
|
}
|
|
|
|
MEditPrintF(hedit, TEXT("%15s %u: '%s'"), (LPTSTR)TEXT("Format"), u, (LPTSTR)afd.szFormat);
|
|
|
|
}
|
|
|
|
LocalFree((HLOCAL)pwfx);
|
|
|
|
return (TRUE);
|
|
} // AcmAppDisplayFormats()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDisplayDriverTags
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hedit:
|
|
//
|
|
// HACMDRIVER had:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNLOCAL AcmAppDisplayDriverTags
|
|
(
|
|
HWND hedit,
|
|
HACMDRIVER had
|
|
)
|
|
{
|
|
static TCHAR szDisplayTitle[] = TEXT("[Driver Tags]\r\n");
|
|
static TCHAR szDisplayFormatTags[] = TEXT("\r\n[Format Tags]");
|
|
static TCHAR szDisplayFilterTags[] = TEXT("\r\n[Filter Tags]");
|
|
|
|
TCHAR ach[APP_MAX_STRING_CHARS];
|
|
ACMDRIVERDETAILS add;
|
|
MMRESULT mmr;
|
|
UINT u;
|
|
HACMDRIVERID hadid;
|
|
|
|
//
|
|
//
|
|
//
|
|
MEditPrintF(hedit, szDisplayTitle);
|
|
|
|
mmr = acmDriverID((HACMOBJ)had, &hadid, 0L);
|
|
MEditPrintF(hedit, TEXT("%25s: %.04Xh"), (LPTSTR)TEXT("Driver Identifier Handle"), hadid);
|
|
MEditPrintF(hedit, TEXT("%25s: %.04Xh"), (LPTSTR)TEXT("Driver Handle"), had);
|
|
|
|
//
|
|
//
|
|
//
|
|
//
|
|
add.cbStruct = sizeof(add);
|
|
mmr = acmDriverDetails(hadid, &add, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
//
|
|
// this should never happen..
|
|
//
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("ERROR GETTING INFO"), mmr);
|
|
return (FALSE);
|
|
}
|
|
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Name"), (LPTSTR)add.szShortName);
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Count Format Tags"), add.cFormatTags);
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Count Filter Tags"), add.cFilterTags);
|
|
|
|
if (0 != add.cFormatTags)
|
|
MEditPrintF(hedit, szDisplayFormatTags);
|
|
|
|
for (u = 0; u < add.cFormatTags; u++)
|
|
{
|
|
ACMFORMATTAGDETAILS aftd;
|
|
WAVEFORMATEX wfx;
|
|
|
|
MEditPrintF(hedit, TEXT("\r\n%25s: %u"), (LPTSTR)TEXT("Format Tag Index"), u);
|
|
|
|
_fmemset(&aftd, 0, sizeof(aftd));
|
|
|
|
aftd.cbStruct = sizeof(aftd);
|
|
aftd.dwFormatTagIndex = u;
|
|
mmr = acmFormatTagDetails(had, &aftd, ACM_FORMATTAGDETAILSF_INDEX);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("ERROR GETTING TAGS"), mmr);
|
|
return (FALSE);
|
|
}
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %lu bytes (requested %lu)"),
|
|
(LPTSTR)TEXT("Size of Tag Details"),
|
|
aftd.cbStruct, (DWORD)sizeof(aftd));
|
|
|
|
//
|
|
// this would be bad
|
|
//
|
|
if (aftd.cbStruct < sizeof(aftd))
|
|
continue;
|
|
|
|
wfx.wFormatTag = LOWORD(aftd.dwFormatTag);
|
|
AcmAppGetFormatDescription(&wfx, ach, NULL);
|
|
MEditPrintF(hedit, TEXT("%25s: [%lu], %s"), (LPTSTR)TEXT("Format Tag"), aftd.dwFormatTag, (LPTSTR)ach);
|
|
MEditPrintF(hedit, TEXT("%25s: %u bytes"), (LPTSTR)TEXT("Format Size (Max)"), aftd.cbFormatSize);
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("Standard Support"), aftd.fdwSupport);
|
|
MEditPrintF(hedit, TEXT("%25s: %lu"), (LPTSTR)TEXT("Standard Formats"), aftd.cStandardFormats);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'"), (LPTSTR)TEXT("Format Tag Name"), (LPTSTR)aftd.szFormatTag);
|
|
|
|
AcmAppDisplayFormats(hedit, had, &aftd);
|
|
}
|
|
|
|
if (0 != add.cFilterTags)
|
|
MEditPrintF(hedit, szDisplayFilterTags);
|
|
|
|
for (u = 0; u < add.cFilterTags; u++)
|
|
{
|
|
ACMFILTERTAGDETAILS aftd;
|
|
WAVEFILTER wfltr;
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %u"), (LPTSTR)TEXT("Filter Tag Index"), u);
|
|
|
|
_fmemset(&aftd, 0, sizeof(aftd));
|
|
|
|
aftd.cbStruct = sizeof(aftd);
|
|
aftd.dwFilterTagIndex = u;
|
|
mmr = acmFilterTagDetails(had, &aftd, ACM_FILTERTAGDETAILSF_INDEX);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
//
|
|
//
|
|
//
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("ERROR GETTING TAGS"), mmr);
|
|
|
|
return (FALSE);
|
|
}
|
|
|
|
MEditPrintF(hedit, TEXT("%25s: %lu bytes (requested %lu)"),
|
|
(LPTSTR)TEXT("Size of Tag Details"),
|
|
aftd.cbStruct, (DWORD)sizeof(aftd));
|
|
|
|
//
|
|
// this would be bad
|
|
//
|
|
if (aftd.cbStruct < sizeof(aftd))
|
|
continue;
|
|
|
|
wfltr.dwFilterTag = aftd.dwFilterTag;
|
|
AcmAppGetFilterDescription(&wfltr, ach, NULL);
|
|
MEditPrintF(hedit, TEXT("%25s: [%lu], %s"), (LPTSTR)TEXT("Filter Tag"), aftd.dwFilterTag, (LPTSTR)ach);
|
|
MEditPrintF(hedit, TEXT("%25s: %lu bytes"), (LPTSTR)TEXT("Format Size (Max)"), aftd.cbFilterSize);
|
|
MEditPrintF(hedit, TEXT("%25s: %.08lXh"), (LPTSTR)TEXT("Standard Support"), aftd.fdwSupport);
|
|
MEditPrintF(hedit, TEXT("%25s: %lu"), (LPTSTR)TEXT("Standard Filters"), aftd.cStandardFilters);
|
|
MEditPrintF(hedit, TEXT("%25s: '%s'\r\n"), (LPTSTR)TEXT("Filter Tag Name"), (LPTSTR)aftd.szFilterTag);
|
|
}
|
|
|
|
|
|
return (TRUE);
|
|
} // AcmAppDisplayDriverTags()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverDetailsDlgProc
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd:
|
|
//
|
|
// UINT uMsg:
|
|
//
|
|
// WPARAM wParam:
|
|
//
|
|
// LPARAM lParam:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriverDetailsDlgProc
|
|
(
|
|
HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
HACMDRIVERID hadid;
|
|
HWND hedit;
|
|
UINT uId;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
hedit = GetDlgItem(hwnd, IDD_AADETAILS_EDIT_DETAILS);
|
|
SetWindowFont(hedit, ghfontApp, FALSE);
|
|
|
|
//
|
|
// clear the display
|
|
//
|
|
AppHourGlass(TRUE);
|
|
SetWindowRedraw(hedit, FALSE);
|
|
MEditPrintF(hedit, NULL);
|
|
|
|
hadid = (HACMDRIVERID)(UINT)lParam;
|
|
if (NULL == hadid)
|
|
{
|
|
MEditPrintF(hedit, TEXT("\r\n\r\nhmm..."));
|
|
}
|
|
else
|
|
{
|
|
AcmAppDisplayDriverDetails(hedit, hadid);
|
|
}
|
|
|
|
Edit_SetSel(hedit, (WPARAM)0, (LPARAM)0);
|
|
|
|
SetWindowRedraw(hedit, TRUE);
|
|
AppHourGlass(FALSE);
|
|
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
uId = GET_WM_COMMAND_ID(wParam, lParam);
|
|
|
|
if ((IDOK == uId) || (IDCANCEL == uId))
|
|
{
|
|
EndDialog(hwnd, (IDOK == uId));
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (FALSE);
|
|
} // AcmAppDriverDetailsDlgProc()
|
|
|
|
|
|
//==========================================================================;
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//==========================================================================;
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverFormatDetailsDlgProc
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd:
|
|
//
|
|
// UINT uMsg:
|
|
//
|
|
// WPARAM wParam:
|
|
//
|
|
// LPARAM lParam:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriverFormatDetailsDlgProc
|
|
(
|
|
HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
HACMDRIVERID hadid;
|
|
HWND hlb;
|
|
HWND hedit;
|
|
int n;
|
|
UINT uId;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
hlb = GetDlgItem(GetParent(hwnd), IDD_AADRIVERFORMATS_LIST_FORMATS);
|
|
n = ListBox_GetCurSel(hlb);
|
|
if (LB_ERR == n)
|
|
return (TRUE);
|
|
|
|
hadid = (HACMDRIVERID)(UINT)ListBox_GetItemData(hlb, n);
|
|
hedit = GetDlgItem(hwnd, IDD_AADETAILS_EDIT_DETAILS);
|
|
SetWindowFont(hedit, ghfontApp, FALSE);
|
|
|
|
//
|
|
// clear the display
|
|
//
|
|
AppHourGlass(TRUE);
|
|
SetWindowRedraw(hedit, FALSE);
|
|
MEditPrintF(hedit, NULL);
|
|
|
|
MEditPrintF(hedit, TEXT("\r\n\r\nFormat Details!"));
|
|
|
|
Edit_SetSel(hedit, (WPARAM)0, (LPARAM)0);
|
|
|
|
SetWindowRedraw(hedit, TRUE);
|
|
AppHourGlass(FALSE);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
uId = GET_WM_COMMAND_ID(wParam, lParam);
|
|
if ((IDOK == uId) || (IDCANCEL == uId))
|
|
{
|
|
EndDialog(hwnd, (IDOK == uId));
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (FALSE);
|
|
} // AcmAppDriverFormatDetailsDlgProc()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverFormatEnumCallback
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HACMDRIVERID hadid:
|
|
//
|
|
// DWORD dwInstance:
|
|
//
|
|
// DWORD fdwSupport:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriverFormatEnumCallback
|
|
(
|
|
HACMDRIVERID hadid,
|
|
LPACMFORMATDETAILS pafd,
|
|
DWORD dwInstance,
|
|
DWORD fdwSupport
|
|
)
|
|
{
|
|
TCHAR ach[APP_MAX_STRING_CHARS];
|
|
HWND hlb;
|
|
int nIndex;
|
|
LPARAM lParam;
|
|
UINT cbwfx;
|
|
|
|
//
|
|
//
|
|
//
|
|
hlb = (HWND)(UINT)dwInstance;
|
|
|
|
cbwfx = SIZEOF_WAVEFORMATEX(pafd->pwfx);
|
|
|
|
wsprintf(ach, gszFormatDriverFormatsList,
|
|
hadid,
|
|
pafd->dwFormatIndex,
|
|
pafd->dwFormatTag,
|
|
pafd->fdwSupport,
|
|
cbwfx,
|
|
(LPTSTR)pafd->szFormat);
|
|
|
|
AcmAppDebugLog(ach);
|
|
AcmAppDebugLog(TEXT("\r\n"));
|
|
|
|
|
|
nIndex = ListBox_AddString(hlb, ach);
|
|
lParam = (LPARAM)(UINT)hadid;
|
|
ListBox_SetItemData(hlb, nIndex, lParam);
|
|
|
|
//
|
|
// return TRUE to continue with enumeration
|
|
//
|
|
return (TRUE);
|
|
} // AcmAppDriverFormatEnumCallback()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverFormatsDlgProc
|
|
//
|
|
// Description:
|
|
// This dialog procedure is used to display driver formats.
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd: Handle to window.
|
|
//
|
|
// UINT uMsg: Message being sent to the window.
|
|
//
|
|
// WPARAM wParam: Specific argument to message.
|
|
//
|
|
// LPARAM lParam: Specific argument to message.
|
|
//
|
|
// Return (BOOL):
|
|
// The return value is specific to the message that was received. For
|
|
// the most part, it is FALSE if this dialog procedure does not handle
|
|
// a message.
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriverFormatsDlgProc
|
|
(
|
|
HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
static PTABBEDLISTBOX ptlb;
|
|
HWND hwndStatic;
|
|
MMRESULT mmr;
|
|
RECT rc;
|
|
PAINTSTRUCT ps;
|
|
UINT uId;
|
|
UINT uCode;
|
|
|
|
HACMDRIVER had;
|
|
ACMFORMATDETAILS afd;
|
|
PWAVEFORMATEX pwfx;
|
|
DWORD cbwfx;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
hwndStatic = GetDlgItem(hwnd, IDD_AADRIVERFORMATS_STATIC_POSITION);
|
|
|
|
GetWindowRect(hwndStatic, &rc);
|
|
ScreenToClient(hwnd, (LPPOINT)&rc.left);
|
|
ScreenToClient(hwnd, (LPPOINT)&rc.right);
|
|
|
|
ShowWindow(hwndStatic, SW_HIDE);
|
|
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERFORMATS_BTN_DETAILS), FALSE);
|
|
|
|
ptlb = TlbCreate(hwnd, IDD_AADRIVERFORMATS_LIST_FORMATS, &rc);
|
|
if (NULL == ptlb)
|
|
return (TRUE);
|
|
|
|
TlbSetFont(ptlb, GetStockFont(ANSI_VAR_FONT), FALSE);
|
|
TlbSetTitleAndTabs(ptlb, gszFormatDriverFormatsTitle, FALSE);
|
|
|
|
SetWindowPos(ptlb->hlb, GetDlgItem(hwnd, IDOK),
|
|
0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
|
|
ListBox_ResetContent(ptlb->hlb);
|
|
|
|
AcmAppDebugLog(NULL);
|
|
|
|
had = (HACMDRIVER)(UINT)lParam;
|
|
|
|
mmr = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, &cbwfx);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
return (TRUE);
|
|
|
|
pwfx = (PWAVEFORMATEX)LocalAlloc(LPTR, (UINT)cbwfx);
|
|
if (NULL == pwfx)
|
|
return (TRUE);
|
|
|
|
_fmemset(&afd, 0, sizeof(afd));
|
|
|
|
afd.cbStruct = sizeof(afd);
|
|
afd.dwFormatTag = WAVE_FORMAT_UNKNOWN;
|
|
afd.pwfx = pwfx;
|
|
afd.cbwfx = cbwfx;
|
|
|
|
//
|
|
//
|
|
//
|
|
SetWindowRedraw(ptlb->hlb, FALSE);
|
|
|
|
mmr = acmFormatEnum(had,
|
|
&afd,
|
|
AcmAppDriverFormatEnumCallback,
|
|
(DWORD)(UINT)ptlb->hlb,
|
|
0L);
|
|
if (MMSYSERR_NOERROR == mmr)
|
|
{
|
|
ListBox_SetCurSel(ptlb->hlb, 0);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERFORMATS_BTN_DETAILS), TRUE);
|
|
}
|
|
|
|
SetWindowRedraw(ptlb->hlb, TRUE);
|
|
LocalFree((HLOCAL)pwfx);
|
|
|
|
return (TRUE);
|
|
|
|
case WM_PAINT:
|
|
if (NULL != ptlb)
|
|
{
|
|
BeginPaint(hwnd, &ps);
|
|
TlbPaint(ptlb, hwnd, ps.hdc);
|
|
EndPaint(hwnd, &ps);
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
uId = GET_WM_COMMAND_ID(wParam, lParam);
|
|
uCode = GET_WM_COMMAND_CMD(wParam, lParam);
|
|
switch (uId)
|
|
{
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
if (NULL != ptlb)
|
|
{
|
|
//
|
|
// hadidk! don't destroy the listbox window, but
|
|
// free all other memory for TLB. the listbox
|
|
// window will be destroyed when the dialog is
|
|
// destroyed.
|
|
//
|
|
ptlb->hlb = NULL;
|
|
|
|
TlbDestroy(ptlb);
|
|
ptlb = NULL;
|
|
}
|
|
|
|
EndDialog(hwnd, (IDOK == uId));
|
|
break;
|
|
|
|
case IDD_AADRIVERFORMATS_BTN_DETAILS:
|
|
DialogBoxParam(ghinst,
|
|
DLG_AADETAILS,
|
|
hwnd,
|
|
AcmAppDriverFormatDetailsDlgProc,
|
|
uId);
|
|
break;
|
|
|
|
case IDD_AADRIVERFORMATS_LIST_FORMATS:
|
|
switch (uCode)
|
|
{
|
|
case LBN_SELCHANGE:
|
|
break;
|
|
|
|
case LBN_DBLCLK:
|
|
DialogBoxParam(ghinst,
|
|
DLG_AADETAILS,
|
|
hwnd,
|
|
AcmAppDriverFormatDetailsDlgProc,
|
|
IDD_AADRIVERFORMATS_BTN_DETAILS);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (FALSE);
|
|
} // AcmAppDriverFormatsDlgProc()
|
|
|
|
|
|
//==========================================================================;
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//==========================================================================;
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverEnumCallback
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HACMDRIVERID hadid:
|
|
//
|
|
// DWORD dwInstance:
|
|
//
|
|
// DWORD fdwSupport:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriverEnumCallback
|
|
(
|
|
HACMDRIVERID hadid,
|
|
DWORD dwInstance,
|
|
DWORD fdwSupport
|
|
)
|
|
{
|
|
static TCHAR szBogus[] = TEXT("????");
|
|
|
|
MMRESULT mmr;
|
|
TCHAR ach[APP_MAX_STRING_CHARS];
|
|
HWND hlb;
|
|
int n;
|
|
ACMDRIVERDETAILS add;
|
|
BOOL fDisabled;
|
|
DWORD dwPriority;
|
|
|
|
//
|
|
//
|
|
//
|
|
hlb = (HWND)(UINT)dwInstance;
|
|
|
|
add.cbStruct = sizeof(add);
|
|
mmr = acmDriverDetails(hadid, &add, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
lstrcpy(add.szShortName, szBogus);
|
|
lstrcpy(add.szLongName, szBogus);
|
|
}
|
|
|
|
dwPriority = (DWORD)-1L;
|
|
acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_PRIORITY, &dwPriority);
|
|
|
|
fDisabled = (0 != (ACMDRIVERDETAILS_SUPPORTF_DISABLED & fdwSupport));
|
|
|
|
wsprintf(ach, gszFormatDriversList,
|
|
hadid,
|
|
(LPTSTR)add.szShortName,
|
|
dwPriority,
|
|
fDisabled ? (LPTSTR)TEXT(" (disabled)") : (LPTSTR)gszNull,
|
|
fdwSupport,
|
|
(LPTSTR)add.szLongName);
|
|
|
|
AcmAppDebugLog(ach);
|
|
AcmAppDebugLog(TEXT("\r\n"));
|
|
|
|
n = ListBox_AddString(hlb, ach);
|
|
ListBox_SetItemData(hlb, n, (LPARAM)(UINT)hadid);
|
|
|
|
|
|
//
|
|
// return TRUE to continue with enumeration (FALSE will stop the
|
|
// enumerator)
|
|
//
|
|
return (TRUE);
|
|
} // AcmAppDriverEnumCallback()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// HACMDRIVERID AcmAppGetSelectedDriver
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd:
|
|
//
|
|
// Return (HACMDRIVERID):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
HACMDRIVERID FNLOCAL AcmAppGetSelectedDriver
|
|
(
|
|
HWND hwnd
|
|
)
|
|
{
|
|
HWND hlb;
|
|
UINT u;
|
|
HACMDRIVERID hadid;
|
|
|
|
hlb = GetDlgItem(hwnd, IDD_AADRIVERS_LIST_DRIVERS);
|
|
|
|
u = (UINT)ListBox_GetCurSel(hlb);
|
|
if (LB_ERR == u)
|
|
{
|
|
DPF(0, "!AcmAppGetSelectedDriver: apparently there is no selected driver?");
|
|
return (NULL);
|
|
}
|
|
|
|
hadid = (HACMDRIVERID)(UINT)ListBox_GetItemData(hlb, u);
|
|
if (NULL == hadid)
|
|
{
|
|
DPF(0, "!AcmAppGetSelectedDriver: NULL item data for selected driver!!?");
|
|
return (NULL);
|
|
}
|
|
|
|
return (hadid);
|
|
} // AcmAppGetSelectedDriver()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriverSelected
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd:
|
|
//
|
|
// Return (BOOL):
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
HACMDRIVER FNLOCAL AcmAppDriverSelected
|
|
(
|
|
HWND hwnd
|
|
)
|
|
{
|
|
LRESULT lr;
|
|
MMRESULT mmr;
|
|
BOOL f;
|
|
HACMDRIVERID hadid;
|
|
HACMDRIVER had;
|
|
DWORD fdwSupport;
|
|
|
|
f = FALSE;
|
|
|
|
//
|
|
//
|
|
//
|
|
if (NULL != ghadSelected)
|
|
{
|
|
mmr = acmDriverClose(ghadSelected, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
DPF(0, "!AcmAppDriverSelected: driver %.04Xh failed to close! mmr=%u", ghadSelected, mmr);
|
|
}
|
|
|
|
ghadSelected = NULL;
|
|
}
|
|
|
|
had = NULL;
|
|
|
|
//
|
|
//
|
|
//
|
|
hadid = AcmAppGetSelectedDriver(hwnd);
|
|
if (NULL != hadid)
|
|
{
|
|
mmr = acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_SUPPORT, &fdwSupport);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
fdwSupport = ACMDRIVERDETAILS_SUPPORTF_DISABLED;
|
|
|
|
//
|
|
// !!! this should NEVER EVER EVER HAPPEN !!!
|
|
//
|
|
DPF(0, "!AcmAppDriverSelected: driver id %.04Xh failed to give support! mmr=%u", hadid, mmr);
|
|
}
|
|
|
|
if (0 == (ACMDRIVERDETAILS_SUPPORTF_DISABLED & fdwSupport))
|
|
{
|
|
mmr = acmDriverOpen(&had, hadid, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
DPF(0, "!AcmAppDriverSelected: driver id %.04Xh failed to open! mmr=%u", hadid, mmr);
|
|
}
|
|
}
|
|
|
|
//
|
|
//
|
|
//
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_DETAILS), TRUE);
|
|
|
|
lr = acmDriverMessage((HACMDRIVER)hadid, ACMDM_DRIVER_ABOUT, -1L, 0L);
|
|
f = (MMSYSERR_NOERROR == lr);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_ABOUT), f);
|
|
|
|
lr = acmDriverMessage((HACMDRIVER)hadid, DRV_QUERYCONFIGURE, 0L, 0L);
|
|
f = (0L != lr);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_CONFIG), f);
|
|
}
|
|
else
|
|
{
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_DETAILS), FALSE);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_ABOUT), FALSE);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_CONFIG), FALSE);
|
|
}
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
if (NULL == had)
|
|
{
|
|
//
|
|
//
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_FORMATS), FALSE);
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_FILTERS), FALSE);
|
|
}
|
|
else
|
|
{
|
|
f = (0 == (ACMDRIVERDETAILS_SUPPORTF_DISABLED & fdwSupport));
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_FORMATS), f);
|
|
|
|
f = (0 != (ACMDRIVERDETAILS_SUPPORTF_FILTER & fdwSupport));
|
|
EnableWindow(GetDlgItem(hwnd, IDD_AADRIVERS_BTN_FILTERS), f);
|
|
}
|
|
|
|
//
|
|
//
|
|
//
|
|
ghadidSelected = hadid;
|
|
ghadSelected = had;
|
|
|
|
return (had);
|
|
} // AcmAppDriverSelected()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// BOOL AcmAppDriversDlgProc
|
|
//
|
|
// Description:
|
|
// This dialog procedure is used to display ACM driver capabilities.
|
|
//
|
|
// Arguments:
|
|
// HWND hwnd: Handle to window.
|
|
//
|
|
// UINT uMsg: Message being sent to the window.
|
|
//
|
|
// WPARAM wParam: Specific argument to message.
|
|
//
|
|
// LPARAM lParam: Specific argument to message.
|
|
//
|
|
// Return (BOOL):
|
|
// The return value is specific to the message that was received. For
|
|
// the most part, it is FALSE if this dialog procedure does not handle
|
|
// a message.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
BOOL FNEXPORT AcmAppDriversDlgProc
|
|
(
|
|
HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
PTABBEDLISTBOX ptlb;
|
|
HWND hstat;
|
|
MMRESULT mmr;
|
|
LRESULT lr;
|
|
RECT rc;
|
|
PAINTSTRUCT ps;
|
|
UINT uId;
|
|
UINT uCode;
|
|
UINT u;
|
|
|
|
|
|
ptlb = (PTABBEDLISTBOX)(UINT)GetWindowLong(hwnd, DWL_USER);
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
hstat = GetDlgItem(hwnd, IDD_AADRIVERS_STATIC_POSITION);
|
|
|
|
GetWindowRect(hstat, &rc);
|
|
ScreenToClient(hwnd, (LPPOINT)&rc.left);
|
|
ScreenToClient(hwnd, (LPPOINT)&rc.right);
|
|
|
|
ShowWindow(hstat, SW_HIDE);
|
|
|
|
ptlb = TlbCreate(hwnd, IDD_AADRIVERS_LIST_DRIVERS, &rc);
|
|
SetWindowLong(hwnd, DWL_USER, (LONG)(UINT)ptlb);
|
|
if (NULL == ptlb)
|
|
{
|
|
EndDialog(hwnd, FALSE);
|
|
return (TRUE);
|
|
}
|
|
|
|
//
|
|
//
|
|
//
|
|
TlbSetFont(ptlb, GetStockFont(ANSI_VAR_FONT), FALSE);
|
|
TlbSetTitleAndTabs(ptlb, gszFormatDriversTitle, FALSE);
|
|
|
|
SetWindowPos(ptlb->hlb, GetDlgItem(hwnd, IDOK),
|
|
0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
|
|
SendMessage(hwnd, WM_ACMAPP_ACM_NOTIFY, 0, 0L);
|
|
return (TRUE);
|
|
|
|
|
|
case WM_PAINT:
|
|
if (NULL != ptlb)
|
|
{
|
|
BeginPaint(hwnd, &ps);
|
|
TlbPaint(ptlb, hwnd, ps.hdc);
|
|
EndPaint(hwnd, &ps);
|
|
}
|
|
break;
|
|
|
|
|
|
case WM_ACMAPP_ACM_NOTIFY:
|
|
u = (UINT)ListBox_GetCurSel(ptlb->hlb);
|
|
if (LB_ERR == u)
|
|
{
|
|
u = 0;
|
|
}
|
|
|
|
SetWindowRedraw(ptlb->hlb, FALSE);
|
|
ListBox_ResetContent(ptlb->hlb);
|
|
|
|
AcmAppDebugLog(NULL);
|
|
|
|
//
|
|
//
|
|
//
|
|
mmr = acmDriverEnum(AcmAppDriverEnumCallback,
|
|
(DWORD)(UINT)ptlb->hlb,
|
|
ACM_DRIVERENUMF_DISABLED);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
//
|
|
// this will let us know something is wrong!
|
|
//
|
|
EnableWindow(GetDlgItem(hwnd, IDOK), FALSE);
|
|
}
|
|
|
|
ListBox_SetCurSel(ptlb->hlb, u);
|
|
SetWindowRedraw(ptlb->hlb, TRUE);
|
|
|
|
AcmAppDriverSelected(hwnd);
|
|
break;
|
|
|
|
|
|
case WM_COMMAND:
|
|
uId = GET_WM_COMMAND_ID(wParam, lParam);
|
|
uCode = GET_WM_COMMAND_CMD(wParam, lParam);
|
|
switch (uId)
|
|
{
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
if (NULL != ptlb)
|
|
{
|
|
//
|
|
// hadidk! don't destroy the listbox window, but
|
|
// free all other memory for TLB. the listbox
|
|
// window will be destroyed when the dialog is
|
|
// destroyed.
|
|
//
|
|
ptlb->hlb = NULL;
|
|
|
|
TlbDestroy(ptlb);
|
|
ptlb = NULL;
|
|
}
|
|
|
|
if (NULL != ghadSelected)
|
|
{
|
|
acmDriverClose(ghadSelected, 0L);
|
|
ghadSelected = NULL;
|
|
}
|
|
|
|
EndDialog(hwnd, (IDOK == uId));
|
|
break;
|
|
|
|
case IDD_AADRIVERS_BTN_DETAILS:
|
|
DialogBoxParam(ghinst,
|
|
DLG_AADETAILS,
|
|
hwnd,
|
|
AcmAppDriverDetailsDlgProc,
|
|
(LPARAM)(UINT)ghadidSelected);
|
|
break;
|
|
|
|
case IDD_AADRIVERS_BTN_FORMATS:
|
|
if (NULL != ghadSelected)
|
|
{
|
|
DialogBoxParam(ghinst,
|
|
DLG_AADRIVERFORMATS,
|
|
hwnd,
|
|
AcmAppDriverFormatsDlgProc,
|
|
(LPARAM)(UINT)ghadSelected);
|
|
}
|
|
break;
|
|
|
|
case IDD_AADRIVERS_BTN_FILTERS:
|
|
#if 0
|
|
if (NULL != ghadSelected)
|
|
{
|
|
DialogBoxParam(ghinst,
|
|
DLG_AADRIVERFILTERS,
|
|
hwnd,
|
|
AcmAppDriverFiltersDlgProc,
|
|
(LPARAM)(UINT)ghadSelected);
|
|
}
|
|
#endif
|
|
break;
|
|
|
|
|
|
case IDD_AADRIVERS_BTN_CONFIG:
|
|
if (NULL == ghadidSelected)
|
|
break;
|
|
|
|
lr = acmDriverMessage((HACMDRIVER)ghadidSelected,
|
|
DRV_CONFIGURE,
|
|
(LPARAM)(UINT)hwnd,
|
|
0L);
|
|
switch (lr)
|
|
{
|
|
case DRVCNF_CANCEL:
|
|
//
|
|
// user canceled the configuration (no
|
|
// configuration information was changed)
|
|
//
|
|
break;
|
|
|
|
case DRVCNF_OK:
|
|
//
|
|
// user changed AND accepted configuration
|
|
// changes--applications should refresh
|
|
// anything they have for this driver
|
|
//
|
|
break;
|
|
|
|
case DRVCNF_RESTART:
|
|
//
|
|
// user changed and accepted configuration
|
|
// changes--however, Windows must be
|
|
// restarted for the changes to take
|
|
// affect.
|
|
//
|
|
#pragma message("----AcmAppDriversDlgProc: must do DRVCNF_RESTART!")
|
|
break;
|
|
|
|
default:
|
|
DPF(0, "!configure: driver returned bogus value=%lu!", lr);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case IDD_AADRIVERS_BTN_ABOUT:
|
|
if (NULL != ghadidSelected)
|
|
{
|
|
//
|
|
// some driver actually provided
|
|
// a custom about box... i'm glad i don't have to
|
|
// port, maintain, and support this driver!
|
|
//
|
|
lr = acmDriverMessage((HACMDRIVER)ghadidSelected,
|
|
ACMDM_DRIVER_ABOUT,
|
|
(LPARAM)(UINT)hwnd,
|
|
0L);
|
|
}
|
|
break;
|
|
|
|
|
|
case IDD_AADRIVERS_BTN_ABLE:
|
|
if (NULL != ghadidSelected)
|
|
{
|
|
DWORD fdwSupport;
|
|
DWORD fdwPriority;
|
|
|
|
mmr = acmMetrics((HACMOBJ)ghadidSelected,
|
|
ACM_METRIC_DRIVER_SUPPORT,
|
|
&fdwSupport);
|
|
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
MessageBeep(0);
|
|
break;
|
|
}
|
|
|
|
if (0 == (ACMDRIVERDETAILS_SUPPORTF_DISABLED & fdwSupport))
|
|
{
|
|
fdwPriority = ACM_DRIVERPRIORITYF_DISABLE;
|
|
}
|
|
else
|
|
{
|
|
fdwPriority = ACM_DRIVERPRIORITYF_ENABLE;
|
|
}
|
|
|
|
mmr = acmDriverPriority(ghadidSelected,
|
|
0L,
|
|
fdwPriority);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
MessageBeep(0);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case IDD_AADRIVERS_BTN_TOTOP:
|
|
if (NULL != ghadidSelected)
|
|
{
|
|
mmr = acmDriverPriority(ghadidSelected, 1, 0L);
|
|
if (MMSYSERR_NOERROR != mmr)
|
|
{
|
|
MessageBeep(0);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case IDD_AADRIVERS_LIST_DRIVERS:
|
|
switch (uCode)
|
|
{
|
|
case LBN_SELCHANGE:
|
|
AcmAppDriverSelected(hwnd);
|
|
break;
|
|
|
|
case LBN_DBLCLK:
|
|
if (GetKeyState(VK_CONTROL) < 0)
|
|
{
|
|
uId = IDD_AADRIVERS_BTN_ABLE;
|
|
}
|
|
else if (GetKeyState(VK_SHIFT) < 0)
|
|
{
|
|
uId = IDD_AADRIVERS_BTN_TOTOP;
|
|
}
|
|
else
|
|
{
|
|
uId = IDD_AADRIVERS_BTN_DETAILS;
|
|
}
|
|
|
|
FORWARD_WM_COMMAND(hwnd,
|
|
uId,
|
|
GetDlgItem(hwnd, uId),
|
|
1,
|
|
SendMessage);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (FALSE);
|
|
} // AcmAppDriversDlgProc()
|