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.

// define helper macros for using interfaces under C 
#ifndef COBJMACROS 
   #define COBJMACROS 
#endif 
 
// 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 
      IltmmCapture_put_VideoWindowFrame(g_pCapture, (long) hwnd); 
 
      // force the frame window to be automatically resized to the video 
      IltmmCapture_put_AutoSize(g_pCapture, VARIANT_TRUE); 
#ifdef _DEBUG 
      { 
         VARIANT_BOOL f; 
         IltmmCapture_get_AutoSize(g_pCapture, &f); 
         assert(f != 0); 
      } 
#endif 
 
      // set preview source video only 
      IltmmCapture_put_PreviewSource(g_pCapture, ltmmCapture_Preview_Video); 
 
      // enable preview 
      IltmmCapture_put_Preview(g_pCapture, VARIANT_TRUE); 
 
 
      // select the first video device available 
      IltmmCapture_get_VideoDevices(g_pCapture, &pDevices); 
      IltmmDevices_put_Selection(pDevices, 0); 
      IUnknown_Release(pDevices); 
 
      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; 
 
 
   hPrevInstance = hPrevInstance ; 
   lpCmdLine     = lpCmdLine ; 
   nCmdShow      = nCmdShow ; 
 
   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) 
      IUnknown_Release(g_pCapture); 
 
   CoUninitialize(); 
 
   return 0;    
} 

Help Version 20.0.2020.4.2
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Multimedia C API Help