The following example shows how to enumerate and select ltmmCapture object sizes.
// 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//// BuildSizeList// fills a listbox to match the contents of the collection//// pSizes = size collection's interface pointer// hwndListBox = listbox window handle//void BuildSizeList(IltmmCaptureSizes* pSizes, HWND hwndListBox){long i;long count;int selected = -1;// reset the listbox contentsSendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);// get the collection's item countIltmmCaptureSizes_get_Count(pSizes, &count);for(i = 0; i < count; i++){IltmmCaptureSize* pSize;TCHAR sz[256];int index;VARIANT_BOOL f;long width;long height;// retrieve collection itemIltmmCaptureSizes_Item(pSizes, i, &pSize);// get displayable nameIltmmCaptureSize_get_Width(pSize, &width);IltmmCaptureSize_get_Height(pSize, &height);_stprintf(sz, _T("%d x %d"), width, height);// 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 collectionIltmmCaptureSize_get_Selected(pSize, &f);if(f)selected = i;// free the collection itemIUnknown_Release(pSize);}// 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;}}}//// SizeSelectionChanged// called to reflect changes in the listbox selection//// pSizes = size collection's interface pointer// hwndListBox = listbox window handle//void SizeSelectionChanged(IltmmCaptureSizes* pSizes, 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){// get the collection item indexitem = (long) SendMessage(hwndListBox, LB_GETITEMDATA, index, 0);// select the item#ifdef _DEBUG{IltmmCaptureSize* pSize;IltmmCaptureSizes_Item(pSizes, item, &pSize);hr = IltmmCaptureSize_put_Selected(pSize, VARIANT_TRUE);IUnknown_Release(pSize);}#elsehr = IltmmCaptureSizes_put_Selection(pSizes, item);#endif// if new selection failed, we need to force the listbox to match the actual selectionif(FAILED(hr)){// get the real selectionIltmmCaptureSizes_get_Selection(pSizes, &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;}}}}}//// SizeDlgProc// selects object sizes//BOOL CALLBACK SizeDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){IltmmCaptureSizes* pSizes;IltmmDevices* pDevices;long index;wParam = wParam ;lParam = lParam ;switch (msg){case WM_INITDIALOG:// select the first video capture deviceIltmmCapture_get_VideoDevices(g_pCapture, &pDevices);IltmmDevices_put_Selection(pDevices, 0);IUnknown_Release(pDevices);IltmmCapture_get_VideoCaptureSizes(g_pCapture, &pSizes);// setup an initial size of 320 x 240IltmmCaptureSizes_Find(pSizes, 320, 240, &index);IltmmCaptureSizes_put_Selection(pSizes, index);// initialize the video size listboxBuildSizeList(pSizes, GetDlgItem(hwnd, IDC_CAPTURESIZES));IUnknown_Release(pSizes);return TRUE;break;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_CAPTURESIZES:if(HIWORD(wParam) == LBN_SELCHANGE){// select the video sizeIltmmCapture_get_VideoCaptureSizes(g_pCapture, &pSizes);SizeSelectionChanged(pSizes, GetDlgItem(hwnd, IDC_CAPTURESIZES));IUnknown_Release(pSizes);}break;case IDOK:EndDialog(hwnd, IDOK);return TRUE;break;}break;}return FALSE;}void SelectingltmmCaptureObjectSizes_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_SIZEDLG, NULL, SizeDlgProc);error:// cleanupif(g_pCapture)IUnknown_Release(g_pCapture);CoUninitialize();}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
