下面的代码演示了一个简单的媒体播放器应用程序。它利用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;
}