The following example shows how to enumerate and select ltmmCapture object target devices.
// define helper macros for using interfaces under C#ifndef COBJMACROS#define COBJMACROS#endif#include "ltmm.h"#include "resource.h"#include "tchar.h"#include "stdio.h"HINSTANCE g_hInstance; // application instance handleIltmmCapture* g_pCapture; // capture object's interface pointer//// BuildTargetDeviceList// fills a listbox to match the contents of the collection//// pTargetDevices = device collection's interface pointer// hwndListBox = listbox window handle//void BuildTargetDeviceList(IltmmTargetDevices* pTargetDevices, HWND hwndListBox){long i;long count;int selected = -1;// reset the listbox contentsSendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);// get the collection's item countIltmmTargetDevices_get_Count(pTargetDevices, &count);for(i = 0; i < count; i++){IltmmTargetDevice* pTargetDevice;BSTR bstr;TCHAR sz[256];int index;VARIANT_BOOL f;// retrieve collection itemIltmmTargetDevices_Item(pTargetDevices, i, &pTargetDevice);// get displayable nameIltmmTargetDevice_get_FriendlyName(pTargetDevice, &bstr);// convert from unicode_stprintf(sz, _T("%ls"), bstr);// free nameSysFreeString(bstr);// add the name to the listboxindex = SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) sz);// associate the listbox item with the collection item indexSendMessage(hwndListBox, LB_SETITEMDATA, index, i);// remember this listbox item, if it is selected in the collectionIltmmTargetDevice_get_Selected(pTargetDevice, &f);if(f)selected = i;// free the collection itemIUnknown_Release(pTargetDevice);}// select the appropriate listbox itemfor(i = 0; i < count; i++){if(selected == (long) SendMessage(hwndListBox, LB_GETITEMDATA, i, 0)){SendMessage(hwndListBox, LB_SETCURSEL, i, 0);break;}}}//// TargetDeviceSelectionChanged// called to reflect changes in the listbox selection//// pTargetDevices = device collection's interface pointer// hwndListBox = listbox window handle//void TargetDeviceSelectionChanged(IltmmTargetDevices* pTargetDevices, HWND hwndListBox){int index;long item;int i;int count;HRESULT hr;// get the index of current listbox selectionindex = (int) SendMessage(hwndListBox, LB_GETCURSEL, 0, 0);if(index < 0){// clear selectionIltmmTargetDevices_put_Selection(pTargetDevices, -1);}else{// get the collection item indexitem = (long) SendMessage(hwndListBox, LB_GETITEMDATA, index, 0);// select the item#ifdef _DEBUG{IltmmTargetDevice* pTargetDevice;IltmmTargetDevices_Item(pTargetDevices, item, &pTargetDevice);hr = IltmmTargetDevice_put_Selected(pTargetDevice, VARIANT_TRUE);IUnknown_Release(pTargetDevice);}#elsehr = IltmmTargetDevices_put_Selection(pTargetDevices, item);#endif// if new selection failed, we need to force the listbox to match the actual selectionif(FAILED(hr)){// get the real selectionIltmmTargetDevices_get_Selection(pTargetDevices, &item);// find the matching listbox itemcount = (int) SendMessage(hwndListBox, LB_GETCOUNT, 0, 0);for(i = 0; i < count; i++){if(item == (long) SendMessage(hwndListBox, LB_GETITEMDATA, i, 0)){SendMessage(hwndListBox, LB_SETCURSEL, i, 0);break;}}}}}//// RefreshTargetDeviceList// called when to completely rebuild the collection//// pTargetDevices = device collection's interface pointer// hwndListBox = listbox window handle//void RefreshTargetDeviceList(IltmmTargetDevices* pTargetDevices, HWND hwndListBox){IltmmTargetDevice* pTargetDevice;long item;BSTR bstr;// get the currently selected itemIltmmTargetDevices_get_Selection(pTargetDevices, &item);if(item >= 0){// get it's unique nameIltmmTargetDevices_Item(pTargetDevices, item, &pTargetDevice);IltmmTargetDevice_get_Name(pTargetDevice, &bstr);IUnknown_Release(pTargetDevice);}else{bstr = NULL;}// rebuild the collectionIltmmTargetDevices_Refresh(pTargetDevices);if(bstr){// find the previously selected itemIltmmTargetDevices_Find(pTargetDevices, bstr, &item);// make it the current selectionif(item >= 0)IltmmTargetDevices_put_Selection (pTargetDevices, item);SysFreeString(bstr);}// rebuild the listboxBuildTargetDeviceList(pTargetDevices, hwndListBox);}//// TargetDeviceDlgProc// selects object devices//BOOL CALLBACK TargetDeviceDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){IltmmTargetDevices* pTargetDevices;lParam = lParam ;switch (msg){case WM_INITDIALOG:// initialize the target device listboxIltmmCapture_get_TargetDevices(g_pCapture, &pTargetDevices);BuildTargetDeviceList(pTargetDevices, GetDlgItem(hwnd, IDC_TARGETDEVICES));IUnknown_Release(pTargetDevices);return TRUE;break;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_REFRESHTARGETDEVICES:// initialize the target device listboxIltmmCapture_get_TargetDevices(g_pCapture, &pTargetDevices);RefreshTargetDeviceList(pTargetDevices, GetDlgItem(hwnd, IDC_TARGETDEVICES));IUnknown_Release(pTargetDevices);return TRUE;break;case IDC_TARGETDEVICES:if(HIWORD(wParam) == LBN_SELCHANGE){// select the target deviceIltmmCapture_get_TargetDevices(g_pCapture, &pTargetDevices);TargetDeviceSelectionChanged(pTargetDevices, GetDlgItem(hwnd, IDC_TARGETDEVICES));IUnknown_Release(pTargetDevices);}break;case IDOK:EndDialog(hwnd, IDOK);return TRUE;break;}break;}return FALSE;}void SelectingltmmCaptureObjectTargetDevices_Example ( HINSTANCE hInstance /*application instance handle*/ ){HRESULT hr;g_hInstance = hInstance;// initialize COM libraryhr = CoInitialize(NULL);if(FAILED(hr))goto error;// create the capture objecthr = CoCreateInstance(&CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmCapture, (void**) &g_pCapture);if(FAILED(hr))goto error;DialogBox(g_hInstance, (LPCTSTR)IDD_TARGETDEVICEDLG, NULL, TargetDeviceDlgProc);error:// cleanupif(g_pCapture)IUnknown_Release(g_pCapture);CoUninitialize();}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
