简单的玩为c++应用程序示例

下面的代码演示了一个简单的媒体播放器应用程序。它利用ltmfPlay最可用的函数对象。

#定义MAKE_MEDIA_PATH (pFileName)(文本(“C: \ \ LEADTOOLS \ \媒体\ \”)文本(pFileName))/ /包含引导媒体基金会工具包头# include“ltmf.h”# include“resource.h”# include < tchar.h ># include < stdio . h ># include < math.h >#定义SZ_WNDCLASS_PLAY _T (“玩WNDCLASS”)#定义WM_PLAYNOTIFY (WM_USER + 1000)实例句柄g_hInstance;/ /应用程序实例句柄HWND g_hwndPlay;/ /视频帧窗口IltmfPlay * g_pPlay;/ /播放对象接口指针intg_nPositionView;/ /当前位置指示器视图模式枚举{POSITIONVIEW_TIME,POSITIONVIEW_FRAME,POSITIONVIEW_TRACKING};/ // / SnapFrameToVideo/ /调整框架窗口的大小匹配视频宽度和高度/ /无效SnapFrameToVideo (无效){HWND HWND;矩形rcWindow rcClient;残雪,cy;/ /获取框架窗口g_pPlay - > get_VideoWindowFrame ((*)&hwnd);/ /获取视频维度g_pPlay - > get_VideoWidth (cx);g_pPlay - > get_VideoHeight (cy);/ /边界调整的维度GetWindowRect (hwnd, &rcWindow);GetClientRect (hwnd, &rcClient);残雪+ = ((rcWindow。——rcWindow.left) (rcClient。正确- rcClient.left));cy + = ((rcWindow。底部——rcWindow.top)——(rcClient。底- rcClient.top));/ /改变窗口的大小SetWindowPos (hwnd, NULL, 0, 0,残雪,cy, SWP_NOMOVE | SWP_NOZORDER);}/ // / FreeSource/ /重置源和释放asssociated资源/ /无效FreeSource (无效){类型;变量var;HGLOBAL HGLOBAL;g_pPlay - > get_SourceType(接线箱);如果(= = ltmfPlay_Source_Array型){g_pPlay - > get_SourceArray (var);g_pPlay - > ResetSource ();VariantClear (var);}其他的如果(= = ltmfPlay_Source_HGlobal型){g_pPlay - > get_SourceHGlobal ((*)&hglobal);g_pPlay - > ResetSource ();GlobalFree (hglobal);}其他的{g_pPlay - > ResetSource ();}}/ // / SetSourceArray/ /一个SAFEARRAY预装载数据媒体和分配的对象/ /无效SetSourceArray (无效){HRESULT人力资源;处理hfile;双字大小,cb;无效*缓冲;变量var;SAFEARRAY * psaSource;/ /打开源文件hfile =它仅仅(MAKE_MEDIA_PATH (“source.avi”)、GENERIC_READ FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);如果(hfile = = INVALID_HANDLE_VALUE)返回;/ /分配同样SAFEARRAY大小= GetFileSize (hfile, NULL);psaSource = SafeArrayCreateVector (VT_UI1 0大小);如果(psaSource !){CloseHandle (hfile);返回;}/ /整个源读入数组SafeArrayAccessData (psaSource, (无效* *)缓冲区);如果(!ReadFile (hfile、缓冲区大小,cb, NULL) | | cb ! =大小){SafeArrayUnaccessData (psaSource);CloseHandle (hfile);SafeArrayDestroy (psaSource);返回;}SafeArrayUnaccessData (psaSource);/ /关闭文件CloseHandle (hfile);/ /分配源数组中VariantInit (var);V_VT (var) = (VT_ARRAY | VT_UI1);V_ARRAY (var) = psaSource;hr = g_pPlay - > put_SourceArray (var);如果(失败(人力资源){SafeArrayDestroy (psaSource);返回;}}/ // / SetSourceArray/ /全局内存预装载数据媒体和分配的对象/ /无效SetSourceHGlobal (无效){HRESULT人力资源;处理hfile;双字大小,cb;无效*缓冲;HGLOBAL HGLOBAL;/ /打开源文件hfile =它仅仅(MAKE_MEDIA_PATH (“source.avi”)、GENERIC_READ FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);如果(hfile = = INVALID_HANDLE_VALUE)返回;/ /分配相同大小的全局内存大小= GetFileSize (hfile, NULL);hglobal = GlobalAlloc (GMEM_MOVEABLE、大小);如果(hglobal !){CloseHandle (hfile);返回;}/ /读取整个源到内存中缓冲= GlobalLock (hglobal);如果(!ReadFile (hfile、缓冲区大小,cb, NULL) | | cb ! =大小){GlobalUnlock (hglobal);CloseHandle (hfile);GlobalFree (hglobal);返回;}GlobalUnlock (hglobal);/ /关闭文件CloseHandle (hfile);hr = g_pPlay - > put_SourceHGlobal (()hglobal);如果(失败(人力资源){GlobalFree (hglobal);返回;}}/ // / PlayWndProc/ /视频帧窗口过程/ /LRESULT调PlayWndProc (HWND HWND,使用UINT消息,按钮按钮,LPARAM LPARAM){型型;VARIANT_BOOL f;l;TCHAR sz [2048];LPTSTR p;d;HRESULT人力资源;ltmfSizeMode sm;x, y,残雪,cy;矩形钢筋混凝土;点pt;HGLOBAL hDIB;IPictureDisp * pPictureDisp;开关(消息){情况下WM_CREATE:g_hwndPlay = hwnd;/ /窗口视频窗口框架g_pPlay - > put_VideoWindowFrame (()hwnd);/ /想要通知消息g_pPlay - > SetNotifyWindow ((hwnd, WM_PLAYNOTIFY);/ /确保我们立即开始播放g_pPlay - > put_AutoStart (VARIANT_TRUE);/ /设置源文件= SysAllocString型(MAKE_MEDIA_PATH (“source.avi”));hr = g_pPlay - > put_SourceFile(型);SysFreeString(型);如果(成功(人力资源){g_pPlay - > get_UnrenderedStreams (l);如果(l ! = 0)对话框(hwnd, _T (“并不是所有的流可能呈现。”),_T (“玩”),MB_ICONEXCLAMATION | MB_OK);}SnapFrameToVideo ();返回0;打破;情况下WM_INITMENUPOPUP:如果(GetSubMenu (GetMenu (hwnd), 0) = =(句柄)按钮){/ /启用菜单项基于对象状态g_pPlay - > get_State (l);EnableMenuItem((句柄)按钮,ID_CONTROL_PLAY (l = = ltmfPlay_State_Paused | | l = = ltmfPlay_State_Stopped) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_PAUSE (l = = ltmfPlay_State_Running) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_STOP (l = = ltmfPlay_State_Running | | l = = ltmfPlay_State_Paused) ?MF_ENABLED: MF_GRAYED);/ /启用基于寻求功能菜单项g_pPlay - > CheckSeekingCapabilities (ltmfPlay_Seeking_Forward | ltmfPlay_Seeking_Backward | ltmfPlay_Seeking_FrameForward | ltmfPlay_Seeking_FrameBackward, l);EnableMenuItem((句柄)按钮,ID_CONTROL_SEEKSTART (l & ltmfPlay_Seeking_Backward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_SEEKEND (l & ltmfPlay_Seeking_Forward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_NEXTFRAME (l & ltmfPlay_Seeking_FrameForward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_PREVIOUSFRAME (l & ltmfPlay_Seeking_FrameBackward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_SEEKSELECTIONSTART (l & (ltmfPlay_Seeking_Forward | ltmfPlay_Seeking_Backward)) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_SEEKSELECTIONEND (l & (ltmfPlay_Seeking_Forward | ltmfPlay_Seeking_Backward)) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_LASTFRAME (l & ltmfPlay_Seeking_FrameForward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_FIRSTFRAME (l & ltmfPlay_Seeking_FrameBackward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_STEPFORWARD1SEC (l & ltmfPlay_Seeking_Forward) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_STEPFORWARD10 (l & ltmfPlay_Seeking_Forward) ?MF_ENABLED: MF_GRAYED);/ /检查当前的速度g_pPlay - > get_Rate(研发);CheckMenuItem((句柄)按钮,ID_CONTROL_HALFSPEED(晶圆厂(d - 0.5) < 0.1) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_NORMALSPEED(晶圆厂(d - 1.0) < 0.1) ?MF_CHECKED: MF_UNCHECKED);/ /检查当前的视频大小模式g_pPlay - > get_VideoWindowSizeMode (sm);CheckMenuItem((句柄)按钮,ID_CONTROL_FITTOWINDOW (sm = = ltmfFit) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_STRETCHTOWINDOW (sm = = ltmfStretch) ?MF_CHECKED: MF_UNCHECKED);/ /启用音量菜单项g_pPlay - > get_Volume (l);EnableMenuItem((句柄)按钮,ID_CONTROL_INCREASEVOLUME (l < 0) ?MF_ENABLED: MF_GRAYED);ID_CONTROL_DECREASEVOLUME EnableMenuItem((句柄)按钮,(l > -10000) ?MF_ENABLED: MF_GRAYED);/ /菜单项使平衡g_pPlay - > get_Balance (l);EnableMenuItem((句柄)按钮,ID_CONTROL_PANRIGHT (l < 10000) ?MF_ENABLED: MF_GRAYED);ID_CONTROL_PANLEFT EnableMenuItem((句柄)按钮,(l > -10000) ?MF_ENABLED: MF_GRAYED);/ /检查静音g_pPlay - > get_Mute (f);CheckMenuItem((句柄)按钮ID_CONTROL_MUTE f ?MF_CHECKED: MF_UNCHECKED);/ /检查自动倒带g_pPlay - > get_AutoRewind (f);CheckMenuItem((句柄)按钮ID_CONTROL_AUTOREWIND f ?MF_CHECKED: MF_UNCHECKED);/ /检查循环g_pPlay - > get_PlayCount (l);ID_CONTROL_LOOP CheckMenuItem((句柄)按钮,(l = = 0) ?MF_CHECKED: MF_UNCHECKED);/ /启用处理器g_pPlay - > HasDialog (ltmfPlay_Dlg_VideoProcessors, f);EnableMenuItem((句柄)按钮ID_CONTROL_PROCESSORS_VIDEO f ?MF_ENABLED: MF_GRAYED);g_pPlay - > HasDialog (ltmfPlay_Dlg_AudioProcessors, f);EnableMenuItem((句柄)按钮ID_CONTROL_PROCESSORS_AUDIO f ?MF_ENABLED: MF_GRAYED);/ /检查源g_pPlay - > get_SourceType (l);CheckMenuItem((句柄)按钮,ID_CONTROL_SOURCE_FILE (l = = ltmfPlay_Source_File) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_SOURCE_ARRAY (l = = ltmfPlay_Source_Array) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_SOURCE_HGLOBAL (l = = ltmfPlay_Source_HGlobal) ?MF_CHECKED: MF_UNCHECKED);g_pPlay - > get_AutoStart (f);CheckMenuItem((句柄)按钮ID_CONTROL_AUTOSTART f ?MF_CHECKED: MF_UNCHECKED);/ /检查地位的观点CheckMenuItem((句柄)按钮,ID_CONTROL_POSITIONVIEW_FRAME (g_nPositionView = = POSITIONVIEW_FRAME) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_POSITIONVIEW_TIME (g_nPositionView = = POSITIONVIEW_TIME) ?MF_CHECKED: MF_UNCHECKED);CheckMenuItem((句柄)按钮,ID_CONTROL_POSITIONVIEW_TRACKING (g_nPositionView = = POSITIONVIEW_TRACKING) ?MF_CHECKED: MF_UNCHECKED);/ /启用仍然选项g_pPlay - > get_RenderedStreams (l);EnableMenuItem((句柄)按钮,ID_CONTROL_COPYDIB (l & ltmfPlay_Stream_Video) ?MF_ENABLED: MF_GRAYED);EnableMenuItem((句柄)按钮,ID_CONTROL_SAVEPICTURE (l & ltmfPlay_Stream_Video) ?MF_ENABLED: MF_GRAYED);}打破;情况下WM_PLAYNOTIFY:开关(按钮){情况下ltmfPlay_Notify_TrackingSelectionChanged:打破;情况下ltmfPlay_Notify_TrackingPositionChanged:p =深圳;* p = _T (' \ 0 ');g_pPlay - > get_RenderedStreams (l);如果((l & ltmfPlay_Stream_Audio) & & ! (l & ltmfPlay_Stream_Video)){/ /音频流如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“音频”));}如果(g_nPositionView = = POSITIONVIEW_TRACKING)/ /跟踪位置{/ /显示当前跟踪位置hr = g_pPlay - > get_CurrentTrackingPosition (l);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“载重汽车。Pos: % d”),l);}/ /显示当前跟踪选择开始hr = g_pPlay - > get_TrackingSelectionStart (l);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“载重汽车。开始:% d”),l);}/ /显示当前跟踪选择结束hr = g_pPlay - > get_TrackingSelectionEnd (l);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“载重汽车。结束:% d”),l);}}其他的如果(g_nPositionView = = POSITIONVIEW_FRAME)/ /帧为基础{/ /显示当前帧的位置hr = g_pPlay - > get_CurrentFramePosition (l);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“框架:% d”),l + 1);}/ /显示的帧总数hr = g_pPlay - > get_FrameDuration (l);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“总帧:% d”),l);}}其他的/ /时间的基础{/ /显示当前位置hr = g_pPlay - > get_CurrentPosition(研发);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“位置:% f”),d);}/ /显示总时间hr = g_pPlay - > get_Duration(研发);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“时间:% f”),d);}/ /显示当前选择的开始hr = g_pPlay - > get_SelectionStart(研发);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“开始:% f”),d);}/ /显示当前选择结束hr = g_pPlay - > get_SelectionEnd(研发);如果(成功(人力资源){如果(p ! =深圳)p + = _stprintf (p, _T (”、“));p + = _stprintf (p, _T (“结束:% f”),d);}}SetWindowText (hwnd, sz);打破;情况下ltmfPlay_Notify_StateChanged:开关(LOWORD (lParam)){情况下ltmfPlay_State_NotReady:_stprintf(深圳_T (“没准备好”));SetWindowText (hwnd, sz);打破;情况下ltmfPlay_State_Stopped:g_pPlay - > get_SourceType (l);如果(l = = ltmfPlay_Source_Array){_stprintf(深圳_T (“停——”(数组)));}其他的如果(l = = ltmfPlay_Source_HGlobal){_stprintf(深圳_T (“停止- [hglobal]”));}其他的{g_pPlay - > get_SourceFile(型);_stprintf(深圳_T (“停止- (% ls)”),型);SysFreeString(型);}SetWindowText (hwnd, sz);打破;情况下ltmfPlay_State_Paused:g_pPlay - > get_SourceType (l);如果(l = = ltmfPlay_Source_Array){_stprintf(深圳_T (“停——”(数组)));}其他的如果(l = = ltmfPlay_Source_HGlobal){_stprintf(深圳_T (“停——(hglobal)”));}其他的{g_pPlay - > get_SourceFile(型);_stprintf(深圳_T (“停——(% ls)”),型);SysFreeString(型);}SetWindowText (hwnd, sz);打破;情况下ltmfPlay_State_Running:_stprintf(深圳_T (“玩”));SetWindowText (hwnd, sz);打破;}打破;情况下ltmfPlay_Notify_Error:_stprintf(深圳_T (0 x % .8X”错误。播放停止。”),lParam);对话框(hwnd,深圳_T (“玩”),MB_ICONEXCLAMATION | MB_OK);打破;}返回0;打破;情况下WM_KEYDOWN:如果(按钮= = VK_ESCAPE){/ /如果全屏模式然后退出g_pPlay - > get_FullScreenMode (f);如果(f){g_pPlay - > put_FullScreenMode (VARIANT_FALSE);返回0;}}打破;情况下WM_DESTROY:FreeSource ();/ /通知g_pPlay - > SetNotifyWindow (()空,0);PostQuitMessage (0);打破;情况下WM_COMMAND:开关(LOWORD(按钮){情况下ID_CONTROL_POSITIONVIEW_TIME:g_nPositionView = POSITIONVIEW_TIME;打破;情况下ID_CONTROL_POSITIONVIEW_FRAME:g_nPositionView = POSITIONVIEW_FRAME;打破;情况下ID_CONTROL_POSITIONVIEW_TRACKING:g_nPositionView = POSITIONVIEW_TRACKING;打破;情况下ID_CONTROL_AUTOSTART:/ /切换自动开始g_pPlay - > get_AutoStart (f);g_pPlay - > put_AutoStart (f ?VARIANT_FALSE: VARIANT_TRUE);返回0;打破;情况下ID_CONTROL_PLAY:/ /播放文件g_pPlay - > Run ();返回0;打破;情况下ID_CONTROL_PAUSE:/ /暂停播放g_pPlay - >暂停();返回0;打破;情况下ID_CONTROL_STOP:/ /停止播放g_pPlay - >停止();返回0;打破;情况下ID_CONTROL_HALFSPEED:/ /设置为正常的播放速度的一半g_pPlay - > put_Rate (0.5);返回0;打破;情况下ID_CONTROL_NORMALSPEED:/ /设置为正常速度g_pPlay - > put_Rate (1.0);返回0;打破;情况下ID_CONTROL_SEEKSTART:/ /文件开始g_pPlay - > SeekStart ();返回0;打破;情况下ID_CONTROL_SEEKEND:/ /文件结束g_pPlay - > SeekEnd ();返回0;打破;情况下ID_CONTROL_SEEKSELECTIONSTART:/ /当前选择的开始g_pPlay - > SeekSelectionStart ();返回0;打破;情况下ID_CONTROL_SEEKSELECTIONEND:/ /结束当前的选择g_pPlay - > SeekSelectionEnd ();返回0;打破;情况下ID_CONTROL_SETSELECTIONSTART:/ /设置当前位置的选择的开始g_pPlay - > MarkSelectionStart ();返回0;打破;情况下ID_CONTROL_SETSELECTIONEND:/ /设置当前位置的选择g_pPlay - > MarkSelectionEnd ();返回0;打破;情况下ID_CONTROL_CLEARSELECTION:/ /清除当前的选择g_pPlay - > get_Duration(研发);g_pPlay - > put_SelectionStart (0.0);g_pPlay - > put_SelectionEnd (d);返回0;打破;情况下ID_CONTROL_NEXTFRAME:/ /转到下一帧g_pPlay - > NextFrame ();返回0;打破;情况下ID_CONTROL_PREVIOUSFRAME:/ /转到前一帧g_pPlay - > PreviousFrame ();返回0;打破;情况下ID_CONTROL_FIRSTFRAME:/ /转到第一帧g_pPlay - > put_CurrentFramePosition (0);返回0;打破;情况下ID_CONTROL_LASTFRAME:/ /转到最后一帧g_pPlay - > get_FrameDuration (l);g_pPlay - > put_CurrentFramePosition (l - 1);返回0;打破;情况下ID_CONTROL_STEPFORWARD1SEC:/ /一步1秒g_pPlay - > get_CurrentPosition(研发);g_pPlay - > put_CurrentPosition (d + 1.0);返回0;打破;情况下ID_CONTROL_STEPFORWARD10:/ /进步10%g_pPlay - > get_CurrentTrackingPosition (l);g_pPlay - > put_CurrentTrackingPosition (l + 1000);返回0;打破;情况下ID_CONTROL_FITTOWINDOW:/ /视频窗口g_pPlay - > put_VideoWindowSizeMode (ltmfFit);返回0;打破;情况下ID_CONTROL_STRETCHTOWINDOW:/ /视频窗口g_pPlay - > put_VideoWindowSizeMode (ltmfStretch);返回0;打破;情况下ID_CONTROL_MUTE:/ /切换静音g_pPlay - > get_Mute (f);g_pPlay - > put_Mute (f ?VARIANT_FALSE: VARIANT_TRUE);返回0;打破;情况下ID_CONTROL_INCREASEVOLUME:/ /增加体积g_pPlay - > get_Volume (l);g_pPlay - > put_Volume(最低l (0, + 300);返回0;打破;情况下ID_CONTROL_DECREASEVOLUME:/ /减少体积g_pPlay - > get_Volume (l);g_pPlay - > put_Volume (max (-10000 l - 300));返回0;打破;情况下ID_CONTROL_PANRIGHT:/ /锅平衡向右移动g_pPlay - > get_Balance (l);g_pPlay - > put_Balance (min (10000 + 300));返回0;打破;情况下ID_CONTROL_PANLEFT:/ /锅平衡向左g_pPlay - > get_Balance (l);g_pPlay - > put_Balance (max (-10000 l - 300));返回0;打破;情况下ID_CONTROL_LOOP:/ /循环切换g_pPlay - > get_PlayCount (l);g_pPlay - > put_PlayCount (l ?0:1);返回0;打破;情况下ID_CONTROL_FULLSCREEN:/ / togglr全屏模式g_pPlay - > ToggleFullScreenMode ();返回0;打破;情况下ID_CONTROL_AUTOREWIND:/ /切换自动倒带g_pPlay - > get_AutoRewind (f);g_pPlay - > put_AutoRewind (f ?VARIANT_FALSE: VARIANT_TRUE);返回0;打破;情况下ID_CONTROL_PROCESSORS_VIDEO:/ /调用视频处理器对话框g_pPlay - > ShowDialog (ltmfPlay_Dlg_VideoProcessors, ()hwnd);返回0;打破;情况下ID_CONTROL_PROCESSORS_AUDIO:/ /调用音频处理器对话框g_pPlay - > ShowDialog (ltmfPlay_Dlg_AudioProcessors, ()hwnd);返回0;打破;情况下ID_CONTROL_SOURCE_FILE:/ /设置源文件FreeSource ();= SysAllocString型(MAKE_MEDIA_PATH (“source.avi”));g_pPlay - > put_SourceFile(型);SysFreeString(型);SnapFrameToVideo ();返回0;打破;情况下ID_CONTROL_SOURCE_ARRAY:/ /设置源数组中FreeSource ();SetSourceArray ();SnapFrameToVideo ();返回0;打破;情况下ID_CONTROL_SOURCE_HGLOBAL:/ /设置hglobal来源FreeSource ();SetSourceHGlobal ();SnapFrameToVideo ();返回0;打破;情况下ID_CONTROL_MEDIAINFORMATION:/ /显示可用的媒体信息p =深圳;g_pPlay - > get_Title(型);p + = _stprintf (p, _T (“标题= % ls”),型?L型:”“);SysFreeString(型);g_pPlay - > get_Author(型);p + = _stprintf (p, _T (”,作者= % ls”),型?L型:”“);SysFreeString(型);g_pPlay - > get_Copyright(型);p + = _stprintf (p, _T (”,版权= % ls”),型?L型:”“);SysFreeString(型);g_pPlay - > get_Description(型);p + = _stprintf (p, _T (”,描述= % ls”),型?L型:”“);SysFreeString(型);g_pPlay - > get_Rating(型);p + = _stprintf (p, _T (”,评级= % ls”),型?L型:”“);SysFreeString(型);对话框(hwnd,深圳_T (“媒体信息”),MB_OK);返回0;打破;情况下ID_CONTROL_COPYDIB:/ /与设备无关的位图hr = g_pPlay - > GetStillDIB (5000, (*)&hDIB);如果(成功(人力资源){/ /复制到剪贴板OpenClipboard (hwnd);EmptyClipboard ();SetClipboardData (CF_DIB hDIB);CloseClipboard ();}返回0;打破;情况下ID_CONTROL_SAVEPICTURE:/ / ole对象hr = g_pPlay - > GetStillPicture(5000年,&pPictureDisp);如果(成功(人力资源){/ /保存图片= SysAllocString型(MAKE_MEDIA_PATH (“still.bmp”));OleSavePictureFile (pPictureDisp型);SysFreeString(型);pPictureDisp - >释放();}返回0;打破;}打破;情况下WM_LBUTTONDOWN:/ /播放/暂停执行,如果用户点击视频窗口g_pPlay - > get_VideoWindowLeft (x);g_pPlay - > get_VideoWindowTop (y);g_pPlay - > get_VideoWindowWidth (cx);g_pPlay - > get_VideoWindowHeight (cy);SetRect (rc, x, y, x +残雪,y + cy);pt.x = ()LOWORD (lParam);pt.y = ()HIWORD (lParam);如果(PtInRect (rc、pt)){g_pPlay - > get_State (l);如果(l = = ltmfPlay_State_Stopped | | l = = ltmfPlay_State_Paused)g_pPlay - > Run ();其他的如果(l = = ltmfPlay_State_Running)g_pPlay - >暂停();}返回0;打破;}返回lParam DefWindowProc (hwnd、消息、按钮);}intAPIENTRY . WinMain(实例句柄实例句柄,实例句柄hPrevInstance,[lpCmdLine,intnCmdShow){味精味精;HRESULT人力资源;WNDCLASSEX wcex;g_hInstance =实例句柄;/ /初始化COM库hr = CoInitialize(空);如果(失败(人力资源)转到错误;/ /注册窗口类的视频帧wcex。cbSize =运算符(WNDCLASSEX);wcex。风格=移| CS_VREDRAW;wcex。lpfnWndProc = PlayWndProc;wcex。cbClsExtra = 0;wcex。cbWndExtra = 0;wcex。实例句柄= g_hInstance;wcex。hIcon =零;wcex。hCursor = LoadCursor (NULL, IDC_ARROW);wcex。hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1);wcex。lpszMenuName = (LPCWSTR) IDR_MENU;wcex。lpszClassName = SZ_WNDCLASS_PLAY;wcex。hIconSm =零;如果(! RegisterClassEx (&wcex))转到错误;/ /创建对象hr = CoCreateInstance (CLSID_ltmfPlay, NULL, CLSCTX_INPROC_SERVER IID_IltmfPlay (无效* *)&g_pPlay);如果(失败(人力资源)转到错误;/ /创建视频框架窗口如果(!CreateWindow (SZ_WNDCLASS_PLAY _T (“玩”),WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,CW_USEDEFAULT CW_USEDEFAULT, 0, 0,空,空,g_hInstance, NULL))转到错误;显示窗口(g_hwndPlay nCmdShow);UpdateWindow (g_hwndPlay);/ /过程,直到完成(GetMessage(味精,NULL, 0, 0)){TranslateMessage(味精);DispatchMessage(味精);}错误:如果(g_pPlay)g_pPlay - >释放();CoUninitialize ();返回0;}

LEADTOOLS媒体基金会C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2023领先的技术公司。保留所有权利。