LEADTOOLS Multimedia API Help > Programming with LEADTOOLS Multimedia > C++ Code > Using AutoSize with ltmmCapture for C++ |
The following example demonstrates automatically sizing the ltmmCapture object's video frame window to the actual size of the media.
// include the LEAD Multimedia TOOLKIT header #include "ltmm.h" #include "resource.h" #include <tchar.h> #include <stdio.h> #include <assert.h> #define SZ_WNDCLASS_CAPTURE _T("CAPTURE WNDCLASS") #define WM_CAPTURENOTIFY (WM_USER + 1000) HINSTANCE g_hInstance; // application instance handle HWND g_hwndCapture; // video frame window IltmmCapture* g_pCapture; // capture object interface pointer // // CaptureWndProc // video frame window procedure // LRESULT CALLBACK CaptureWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { IltmmDevices* pDevices; switch (message) { case WM_CREATE: g_hwndCapture = hwnd; // window is the video window frame g_pCapture->put_VideoWindowFrame((long) hwnd); // force the frame window to be automatically resized to the video g_pCapture->put_AutoSize(VARIANT_TRUE); #ifdef _DEBUG { VARIANT_BOOL f; g_pCapture->get_AutoSize(&f); assert(f != 0); } #endif // set preview source video only g_pCapture->put_PreviewSource(ltmmCapture_Preview_Video); // enable preview g_pCapture->put_Preview(VARIANT_TRUE); // select the first video device available g_pCapture->get_VideoDevices(&pDevices); pDevices->put_Selection(0); pDevices->Release(); return 0; break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, message, wParam, lParam); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HRESULT hr; WNDCLASSEX wcex; g_hInstance = hInstance; // initialize COM library hr = CoInitialize(NULL); if(FAILED(hr)) goto error; // register the video frame window class wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = CaptureWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = g_hInstance; wcex.hIcon = NULL; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1); wcex.lpszMenuName = NULL; wcex.lpszClassName = SZ_WNDCLASS_CAPTURE; wcex.hIconSm = NULL; if(!RegisterClassEx(&wcex)) goto error; // create the capture object hr = CoCreateInstance(CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, IID_IltmmCapture, (void**) &g_pCapture); if(FAILED(hr)) goto error; // create the video frame window if(!CreateWindow(SZ_WNDCLASS_CAPTURE, _T("Capture"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, g_hInstance, NULL)) goto error; ShowWindow(g_hwndCapture, nCmdShow); UpdateWindow(g_hwndCapture); // process until done while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } error: if(g_pCapture) g_pCapture->Release(); CoUninitialize(); return 0; }