フィルターを選択するためのダイアログ ボックスの生成
アプリケーションを使用すると、ユーザーは任意のフィルター操作を選択し、波形オーディオ データに適用できます。 次の例では、アプリケーションはフィルターを保持するバッファーを割り当て、 acmFilterChoose 関数を使用してフィルターを選択します。 この例の関数は、適切なフィルターまたはフィルター タグを使用して呼び出す必要があります。
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);