Erstellen eines Dialogfelds zum Auswählen eines Filters
Eine Anwendung kann Es Benutzern ermöglichen, einen beliebigen Filtervorgang auszuwählen und auf Waveform-Audiodaten anzuwenden. Im folgenden Beispiel ordnet die Anwendung einen Puffer für den Filter zu und verwendet dann die Funktion acmFilterChoose, um den Filter auszuwählen. Die Funktionen in diesem Beispiel müssen mit dem entsprechenden Filter- oder Filtertag aufgerufen werden.
MMRESULT mmr;
ACMFILTERCHOOSE afc;
PWAVEFILTER pwfltr;
DWORD cbwfltr;
// Determine the maximum size required for any valid filter
// for which the ACM has a driver installed and enabled.
mmr = acmMetrics(NULL, ACM_METRIC_MAX_SIZE_FILTER, &cbwfltr);
if (MMSYSERR_NOERROR != mmr) {
// The ACM probably has no drivers installed and
// enabled for filter operations.
return (mmr);
}
// Dynamically allocate a structure large enough to hold the
// maximum sized filter enabled in the system.
pwfltr = (PWAVEFILTER)LocalAlloc(LPTR, (UINT)cbwfltr);
if (NULL == pwfltr) {
return (MMSYSERR_NOMEM);
}
// Initialize the ACMFILTERCHOOSE members.
memset(&afc, 0, sizeof(afc));
afc.cbStruct = sizeof(afc);
afc.fdwStyle = 0L; // no special style flags
afc.hwndOwner = hwnd; // hwnd of parent window
afc.pwfltr = pwfltr; // wfltr to receive selection
afc.cbwfltr = cbwfltr; // size of wfltr buffer
afc.pszTitle = TEXT("Any Filter Selection");
// Call the ACM to bring up the filter-selection dialog box.
mmr = acmFilterChoose(&afc);
if (MMSYSERR_NOERROR == mmr) {
// The user selected a valid filter. The pwfltr buffer,
// allocated above, contains the complete filter description.
}
// Clean up and exit.
LocalFree((HLOCAL)pwfltr);
return (mmr);