Using AutoSize with ltmfPlay Example for C++

The following example demonstrates automatically sizing the ltmfPlay object's video frame window to the actual size of the media.

#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS\\Media\\")TEXT(pFileName)) 
// include the LEAD Media Foundation TOOLKIT header 
#include "ltmf.h" 
#include "resource.h" 
#include <tchar.h> 
#include <stdio.h> 
#include <assert.h> 
#define SZ_WNDCLASS_PLAY _T("PLAY WNDCLASS") 
#define WM_PLAYNOTIFY (WM_USER + 1000) 
HINSTANCE g_hInstance;   // application instance handle 
HWND g_hwndPlay;  // video frame window 
IltmfPlay* g_pPlay;  // play object interface pointer 
// 
// PlayWndProc 
// video frame window procedure 
// 
LRESULT CALLBACK PlayWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
   BSTR bstr; 
   switch (message) 
   { 
   case WM_CREATE: 
      g_hwndPlay = hwnd; 
      // window is the video window frame 
      g_pPlay->put_VideoWindowFrame((long) hwnd); 
      // force the frame to size to the video 
      g_pPlay->put_AutoSize(VARIANT_TRUE); 
#ifdef _DEBUG 
      { 
         VARIANT_BOOL f; 
         g_pPlay->get_AutoSize(&f); 
         assert(f != 0); 
      } 
#endif 
      // make sure we start playing immediately 
      g_pPlay->put_AutoStart(VARIANT_TRUE); 
      // set the source file 
      bstr = SysAllocString(MAKE_MEDIA_PATH("source.avi")); 
      g_pPlay->put_SourceFile(bstr); 
      SysFreeString(bstr); 
      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 = PlayWndProc; 
   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_PLAY; 
   wcex.hIconSm = NULL; 
   if(!RegisterClassEx(&wcex)) 
      goto error; 
   // create the play object 
   hr = CoCreateInstance(CLSID_ltmfPlay, NULL, CLSCTX_INPROC_SERVER, IID_IltmfPlay, (void**) &g_pPlay); 
   if(FAILED(hr)) 
      goto error; 
   // create the video frame window 
   if(!CreateWindow(SZ_WNDCLASS_PLAY, _T("Play"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, g_hInstance, NULL)) 
      goto error; 
   ShowWindow(g_hwndPlay, nCmdShow); 
   UpdateWindow(g_hwndPlay); 
   // process until done 
   while (GetMessage(&msg, NULL, 0, 0)) 
   {      TranslateMessage(&msg); 
   DispatchMessage(&msg); 
   }   error: 
   if(g_pPlay) 
      g_pPlay->Release(); 
   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 Media Foundation C API Help