Using AutoSize with ltmmPlay for C++

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

#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS 17.5\\Media\\")TEXT(pFileName))


// include the LEAD Multimedia TOOLKIT header
#include "ltmm.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
IltmmPlay* 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_ltmmPlay, NULL, CLSCTX_INPROC_SERVER, IID_IltmmPlay, (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;
}