LEADTOOLS Media Foundation Help > Programming with LEADTOOLS Media Foundation > C++ Code > 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; }