下面的例子显示了如何枚举并选择ltmfCapture对象处理器。
# include“ltmf.h”
# include“resource.h”
# include“tchar.h”
# include“文件”
实例句柄g_hInstance;
/ /应用程序实例句柄
IltmfCapture * g_pCapture;
/ /捕获对象的接口指针
/ /
/ / BuildProcessorList
/ /填充注册处理器列表框来匹配集合的内容
/ /
/ / pProcessors =处理器集合的接口指针
/ / hwndListBox = listbox窗口句柄
/ /
无效BuildProcessorList (IltmfProcessors * pProcessors HWND hwndListBox)
{
长我;
长计数;
/ /重置列表框的内容
SendMessage (hwndListBox LB_RESETCONTENT 0,0);
/ /得到集合的项数
pProcessors - > get_Count(数);
为(i = 0;我<数;我+ +)
{
IltmfProcessor * pProcessor;
型型;
TCHAR sz [256];
int指数;
/ /检索项集合
pProcessors - >项目(我&pProcessor);
/ /得到可显示的名字
pProcessor - > get_FriendlyName(型);
/ /从unicode转换
_stprintf(深圳_T (“% ls”),型);
/ /免费的名字
SysFreeString(型);
/ /将名称添加到列表框
指数= SendMessage (hwndListBox LB_ADDSTRING 0, (LPARAM) (LPCTSTR)深圳);
/ /关联列表框项集合的项的索引
SendMessage (hwndListBox LB_SETITEMDATA,指数i);
/ /免费收藏项目
pProcessor - >释放();
}
}
/ /
/ / BuildSelectedProcessorList
/ /填充选择的处理器列表框来匹配集合的内容
/ /
/ / pSelProcessors =选中处理器集合的接口指针
/ / hwndSelListBox =选中列表框窗口句柄
/ /
无效BuildSelectedProcessorList (IltmfProcessors * pSelProcessors HWND hwndSelListBox)
{
长我;
长计数;
/ /重置列表框的内容
SendMessage (hwndSelListBox LB_RESETCONTENT 0,0);
/ /得到集合的项数
pSelProcessors - > get_Count(数);
为(i = 0;我<数;我+ +)
{
IltmfProcessor * pProcessor;
型型;
TCHAR sz [256];
/ /检索项集合
pSelProcessors - >项目(我&pProcessor);
/ /得到可显示的名字
pProcessor - > get_FriendlyName(型);
/ /从unicode转换
_stprintf(深圳_T (“% ls”),型);
/ /免费的名字
SysFreeString(型);
/ /将名称添加到列表框
SendMessage (hwndSelListBox LB_ADDSTRING 0, (LPARAM) (LPCTSTR)深圳);
/ /免费收藏项目
pProcessor - >释放();
}
/ /添加一个空白的条目的列表并选择它
SendMessage (hwndSelListBox LB_ADDSTRING 0, (LPARAM)(值)_T (”“));
SendMessage (hwndSelListBox LB_SETCURSEL,计数,0);
}
/ /
/ / RemoveSelectedProcessor
/ /删除当前选择的处理器
/ /
/ / pSelProcessors =选中处理器集合的接口指针
/ / hwndSelListBox =选中列表框窗口句柄
/ /
无效RemoveSelectedProcessor (IltmfProcessors * pSelProcessors HWND hwndSelListBox)
{
int指数;
int计数;
/ /选中处理器列表框项的数量
数= (int)SendMessage (hwndSelListBox LB_GETCOUNT 0,0);
/ /删除点来自所选处理器列表框
指数= (int)SendMessage (hwndSelListBox LB_GETCURSEL 0,0);
/ /如果没有一个有效的处理器,然后返回
如果(指数< 0 | |指数> =(数- 1))
返回;
/ /删除选择的处理器处理器集合
pSelProcessors - >删除(指数);
/ /删除选中处理器列表框的名字
SendMessage (hwndSelListBox, LB_DELETESTRING、索引0);
/ /选择列表框中的下一个项目
SendMessage (hwndSelListBox, LB_SETCURSEL、索引0);
}
/ /
/ / RemoveAllSelectedProcessors
/ /删除所有选择的处理器
/ /
/ / pSelProcessors =选中处理器集合的接口指针
/ / hwndSelListBox =选中列表框窗口句柄
/ /
无效RemoveAllSelectedProcessors (IltmfProcessors * pSelProcessors HWND hwndSelListBox)
{
pSelProcessors - > RemoveAll ();
BuildSelectedProcessorList (pSelProcessors hwndSelListBox);
}
/ /
/ / InsertSelectedProcessor
/ /将当前选中的十一五处理器插入te选择处理器集合
/ /
/ / pProcessors =注册处理器集合的接口指针
/ / hwndListBox =注册listbox窗口句柄
/ / pSelProcessors =选中处理器集合的接口指针
/ / hwndSelListBox =选中列表框窗口句柄
/ /
无效InsertSelectedProcessor (IltmfProcessors * pProcessors HWND hwndListBox,
IltmfProcessors * pSelProcessors HWND hwndSelListBox)
{
int指数;
intselindex;
长项;
IltmfProcessor * pProcessor;
型型;
TCHAR sz [256];
/ /注册处理器列表框的选择
指数= (int)SendMessage (hwndListBox LB_GETCURSEL 0,0);
如果(指数< 0)
返回;
/ /获取集合项的索引
项= (长)SendMessage (hwndListBox, LB_GETITEMDATA、索引0);
/ /获得实际的项目
pProcessors - >项目(项目、&pProcessor);
/ /获得指定的处理器列表框的插入点
selindex = (int)SendMessage (hwndSelListBox LB_GETCURSEL 0,0);
/ /插入处理器选择处理器集合
pSelProcessors - >添加(pProcessor selindex);
/ /得到可显示的名称
pProcessor - > get_FriendlyName(型);
/ /释放处理器
pProcessor - >释放();
/ /从unicode转换
_stprintf(深圳_T (“% ls”),型);
/ /免费的名字
SysFreeString(型);
/ /插入名称选择的处理器列表框
SendMessage (hwndSelListBox、LB_INSERTSTRING selindex (LPARAM) (LPCTSTR)深圳);
}
/ /
/ / RefreshProcessorList
/ /被完全重建集合
/ /
/ / pProcessors =处理器集合的接口指针
/ / hwndListBox = listbox窗口句柄
/ /
无效RefreshProcessorList (IltmfProcessors * pProcessors HWND hwndListBox)
{
IltmfProcessor * pProcessor;
长项;
型型;
长我;
长计数;
/ /获取当前选中的项
我= (int)SendMessage (hwndListBox LB_GETCURSEL 0,0);
如果(我> = 0)
{
项= (长)SendMessage (hwndListBox LB_GETITEMDATA,我,0);
/ /得到它独特的名字
pProcessors - >项目(项目、&pProcessor);
pProcessor - > get_Name(型);
pProcessor - >释放();
}
其他的
{
型=零;
}
/ /重建集合
pProcessors - > Refresh ();
/ /重建列表框
BuildProcessorList (pProcessors hwndListBox);
如果(型)
{
/ /找到先前选定的项
pProcessors - >找到(型、项目);
/ /当前的选择
如果(项目> = 0)
{
pProcessors - > get_Count(数);
/ /选择适当的列表框项
为(i = 0;我<数;我+ +)
{
如果(项目= = (长)SendMessage (hwndListBox LB_GETITEMDATA,我,0))
{
SendMessage (hwndListBox LB_SETCURSEL,我,0);
打破;
}
}
}
SysFreeString(型);
}
}
/ /
/ / ProcessorSelectionChanged
/ /注册时调用处理器选择已经改变了
/ /
/ / pProcessors =处理器集合的接口指针
/ / hwndListBox = listbox窗口句柄
/ / hwndAddBtn =添加按钮窗口句柄
/ /
无效ProcessorSelectionChanged (IltmfProcessors * pProcessors HWND hwndListBox, HWND hwndAddBtn)
{
int指数;
/ /获取当前选中列表框项
指数= (int)SendMessage (hwndListBox LB_GETCURSEL 0,0);
/ /启用添加,如果将被选中
EnableWindow (hwndAddBtn指数> = 0);
}
/ /
/ / SelectedProcessorSelectionChanged
/ /选中时调用处理器选择已经改变了
/ /
/ / pSelProcessors =处理器集合的接口指针
/ / hwndSelListBox = listbox窗口句柄
/ / hwndRemoveBtn =删除按钮窗口句柄
/ / hwndRemoveAllBtn =删除所有按钮窗口句柄
/ / hwndPropBtn =属性按钮窗口句柄
/ /
无效SelectedProcessorSelectionChanged (IltmfProcessors * pSelProcessors HWND hwndSelListBox, HWND hwndRemoveBtn, HWND hwndRemoveAllBtn, HWND hwndPropBtn)
{
int指数;
int计数;
BOOL fTransform;
VARIANT_BOOL fHasDialog = VARIANT_FALSE;
HRESULT人力资源;
/ /获取当前选中列表框项
指数= (int)SendMessage (hwndSelListBox LB_GETCURSEL 0,0);
/ /获得项目总数
数= (int)SendMessage (hwndSelListBox LB_GETCOUNT 0,0);
/ /这是一个改变吗?
fTransform =(指数> = 0 & &指数<(数- 1));
/ /启用删除所有按钮,如果有一个变换在列表中
EnableWindow (hwndRemoveAllBtn数> 1);
/ /启用删除按钮,如果它是一个变换
EnableWindow (hwndRemoveBtn fTransform);
如果(fTransform)
{
/ /检查的availablility变换属性对话框
IltmfProcessor * pProcessor;
hr = pSelProcessors - >项目(指数、&pProcessor);
如果(成功(人力资源)
{
pProcessor - > HasDialog (ltmfProcessor_Dlg_Properties &fHasDialog);
pProcessor - >释放();
}
}
其他的
{
fHasDialog = VARIANT_FALSE;
}
/ /启用属性按钮,如果对话框
EnableWindow (hwndPropBtn fHasDialog ! = VARIANT_FALSE);
}
/ /
/ / InvokeProcessorProperties
/ /调用当前选择的处理器的属性对话框
/ /
/ / pSelProcessors =处理器集合的接口指针
/ / hwndSelListBox = listbox窗口句柄
/ / hwndParent =父窗口句柄
/ /
无效InvokeProcessorProperties (IltmfProcessors * pSelProcessors HWND hwndSelListBox, HWND hwndParent)
{
int指数;
int计数;
IltmfProcessor * pProcessor;
HRESULT人力资源;
/ /获取当前选中列表框项
指数= (int)SendMessage (hwndSelListBox LB_GETCURSEL 0,0);
/ /获得项目总数
数= (int)SendMessage (hwndSelListBox LB_GETCOUNT 0,0);
/ /这是一个改变吗?
如果(指数> = 0 & &指数<(数- 1))
{
/ /调用处理器的对话框
hr = pSelProcessors - >项目(指数、&pProcessor);
如果(成功(人力资源)
{
pProcessor - > ShowDialog (ltmfProcessor_Dlg_Properties, (长)hwndParent);
pProcessor - >释放();
}
}
}
/ /
/ / ProcessorDlgProc
/ /选择对象处理器
/ /
BOOL调ProcessorDlgProc (HWND HWND,使用UINT味精,按钮按钮,LPARAM LPARAM)
{
IltmfProcessors * pProcessors;
IltmfProcessors * pSelProcessors;
开关(味精)
{
情况下WM_INITDIALOG:
/ /初始化音频处理器列表框
g_pCapture - > get_AudioProcessors (&pProcessors);
BuildProcessorList (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS));
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDAUDIOPROCESSOR));
pProcessors - >释放();
/ /初始化选择的音频处理器列表框
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
BuildSelectedProcessorList (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEAUDIOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_AUDIOPROCESSORPROPERTIES));
pSelProcessors - >释放();
/ /初始化视频处理器列表框
g_pCapture - > get_VideoProcessors (&pProcessors);
BuildProcessorList (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS));
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDVIDEOPROCESSOR));
pProcessors - >释放();
/ /初始化选中的视频处理器列表框
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
BuildSelectedProcessorList (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEVIDEOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_VIDEOPROCESSORPROPERTIES));
pSelProcessors - >释放();
返回真正的;
打破;
情况下WM_COMMAND:
开关(LOWORD(按钮)
{
情况下IDC_ADDAUDIOPROCESSOR:
/ /插入处理器选择音频处理器集合
g_pCapture - > get_AudioProcessors (&pProcessors);
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
InsertSelectedProcessor (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS),
pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEAUDIOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_AUDIOPROCESSORPROPERTIES));
pSelProcessors - >释放();
pProcessors - >释放();
返回真正的;
打破;
情况下IDC_REMOVEAUDIOPROCESSOR:
/ /删除处理器从选中的音频处理器集合
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
RemoveSelectedProcessor (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEAUDIOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_AUDIOPROCESSORPROPERTIES));
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_REMOVEALLAUDIOPROCESSORS:
/ /删除所有选中的音频处理器
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
RemoveAllSelectedProcessors (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEAUDIOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_AUDIOPROCESSORPROPERTIES));
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_REFRESHAUDIOPROCESSORS:
/ /重建注册音频处理器集合
g_pCapture - > get_AudioProcessors (&pProcessors);
RefreshProcessorList (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS));
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDAUDIOPROCESSOR));
pProcessors - >释放();
返回真正的;
打破;
情况下IDC_AUDIOPROCESSORPROPERTIES:
/ /调用选择音频处理器的属性对话框
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
InvokeProcessorProperties (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS) hwnd);
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_SELAUDIOPROCESSORS:
如果(HIWORD(按钮)= = LBN_SELCHANGE)
{
/ /选择改变,更新按钮
g_pCapture - > get_SelectedAudioProcessors (&pSelProcessors);
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEAUDIOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLAUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_AUDIOPROCESSORPROPERTIES));
pSelProcessors - >释放();
}
打破;
情况下IDC_AUDIOPROCESSORS:
如果(HIWORD(按钮)= = LBN_SELCHANGE)
{
/ /选择改变,更新按钮
g_pCapture - > get_AudioProcessors (&pProcessors);
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_AUDIOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDAUDIOPROCESSOR));
pProcessors - >释放();
}
打破;
情况下IDC_ADDVIDEOPROCESSOR:
/ /插入处理器选择视频处理器集合
g_pCapture - > get_VideoProcessors (&pProcessors);
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
InsertSelectedProcessor (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS),
pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEVIDEOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_VIDEOPROCESSORPROPERTIES));
pSelProcessors - >释放();
pProcessors - >释放();
返回真正的;
打破;
情况下IDC_REMOVEVIDEOPROCESSOR:
/ /删除处理器从选中的视频处理器集合
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
RemoveSelectedProcessor (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEVIDEOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_VIDEOPROCESSORPROPERTIES));
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_REMOVEALLVIDEOPROCESSORS:
/ /删除所有选中的视频处理器
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
RemoveAllSelectedProcessors (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS));
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEVIDEOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_VIDEOPROCESSORPROPERTIES));
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_REFRESHVIDEOPROCESSORS:
/ /重建注册视频处理器集合
g_pCapture - > get_VideoProcessors (&pProcessors);
RefreshProcessorList (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS));
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDVIDEOPROCESSOR));
pProcessors - >释放();
返回真正的;
打破;
情况下IDC_VIDEOPROCESSORPROPERTIES:
/ /调用所选视频处理器的属性对话框
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
InvokeProcessorProperties (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS) hwnd);
pSelProcessors - >释放();
返回真正的;
打破;
情况下IDC_SELVIDEOPROCESSORS:
如果(HIWORD(按钮)= = LBN_SELCHANGE)
{
/ /选择改变,更新按钮
g_pCapture - > get_SelectedVideoProcessors (&pSelProcessors);
SelectedProcessorSelectionChanged (pSelProcessors GetDlgItem (hwnd, IDC_SELVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_REMOVEVIDEOPROCESSOR),
GetDlgItem (hwnd, IDC_REMOVEALLVIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_VIDEOPROCESSORPROPERTIES));
pSelProcessors - >释放();
}
打破;
情况下IDC_VIDEOPROCESSORS:
如果(HIWORD(按钮)= = LBN_SELCHANGE)
{
/ /选择改变,更新按钮
g_pCapture - > get_VideoProcessors (&pProcessors);
ProcessorSelectionChanged (pProcessors GetDlgItem (hwnd, IDC_VIDEOPROCESSORS),
GetDlgItem (hwnd, IDC_ADDVIDEOPROCESSOR));
pProcessors - >释放();
}
打破;
情况下IDOK:
EndDialog (hwnd, IDOK);
返回真正的;
打破;
}
打破;
}
返回虚假的;
}
intAPIENTRY . WinMain(实例句柄实例句柄,
实例句柄hPrevInstance,
[lpCmdLine,
intnCmdShow)
{
HRESULT人力资源;
g_hInstance =实例句柄;
/ /初始化COM库
hr = CoInitialize(空);
如果(失败(人力资源)
转到错误;
/ /创建捕获对象
hr = CoCreateInstance (CLSID_ltmfCapture, NULL, CLSCTX_INPROC_SERVER IID_IltmfCapture (无效* *)&g_pCapture);
如果(失败(人力资源)
转到错误;
对话框(g_hInstance LPCTSTR IDD_PROCESSORDLG, NULL, ProcessorDlgProc);错误:
/ /清理
如果(g_pCapture)
g_pCapture - >释放();
CoUninitialize ();
返回0;
}