检索描述筛选器的字符串
应用程序通常需要显示描述当前格式的字符串。 可以使用 acmFilterTagDetails 和 acmFilterDetails 函数轻松完成此任务。 必须使用相应的筛选器或筛选器标记调用这些函数。 以下示例演示如何使用这些函数。
#include <mmsystem.h>
#include <mmreg.h>
#include <msacm.h>
BOOL GetFilterDescription
(
LPWAVEFILTER pwfltr,
LPTSTR pszFilterTag,
DWORD cchFilterTag, // Size of pszFilterTag buffer.
LPTSTR pszFilter,
DWORD cchFilter // Size of pszFilter buffer.
)
{
MMRESULT mmr;
errno_t errno;
// Retrieve the name for the filter tag of the specified filter.
if (NULL != pszFilterTag) {
ACMFILTERTAGDETAILS aftd;
// Initialize all unused members of the ACMFILTERTAGDETAILS
// structure to zero.
memset(&aftd, 0, sizeof(aftd));
// Fill in the required members of the ACMFILTERTAGDETAILS
// structure for the ACM_FILTERTAGDETAILSF_FILTERTAG query.
aftd.cbStruct = sizeof(aftd);
aftd.dwFilterTag = pwfltr->dwFilterTag;
// Ask the ACM to find the first available driver that
// supports the specified filter tag.
mmr = acmFilterTagDetails(NULL, &aftd,
ACM_FILTERTAGDETAILSF_FILTERTAG);
if (MMSYSERR_NOERROR != mmr) {
// No ACM driver is available that supports the
// specified filter tag.
return FALSE;
}
// Copy the filter tag name into the calling application's
// buffer.
errno = wcscpy_s(pszFilterTag, cchFilterTag, aftd.szFilterTag);
if (errno != 0)
{
return FALSE;
}
}
// Retrieve the description of the attributes for the specified
// filter.
if (NULL != pszFilter) {
ACMFILTERDETAILS afd;
// Initialize all unused members of the ACMFILTERDETAILS
// structure to zero.
memset(&afd, 0, sizeof(afd));
// Fill in the required members of the ACMFILTERDETAILS
// structure for the ACM_FILTERDETAILSF_FILTER query.
afd.cbStruct = sizeof(afd);
afd.dwFilterTag = pwfltr->dwFilterTag;
afd.pwfltr = pwfltr;
afd.cbwfltr = pwfltr->cbStruct;
// Ask the ACM to find the first available driver that
// supports the specified filter.
mmr = acmFilterDetails(NULL, &afd, ACM_FILTERDETAILSF_FILTER);
if (MMSYSERR_NOERROR != mmr) {
// No ACM driver is available that supports the
// specified filter.
return FALSE;
}
// Copy the description string into the caller's buffer.
errno = wcscpy_s(pszFilter, cchFilter, afd.szFilter);
if (errno != 0)
{
return FALSE;
}
}
return TRUE;
}