# 使用mciSendString在指定窗口里播放视频文件并设置播放视频画面大小
# 背景
mciSendString 函数是一个功能强大的函数,它有自己的mci命令,通过传入mci命令从而控制多媒体设备的操作。之前使用过 mciSendString 函数播放视频,但是,那个程序并没有做得很完善,没有指定在哪个窗口上播放显示,也没有设置播放视频的宽高大小。
后来,无意中在网上看到别人写的一些总结,感觉写得很详细,一下子就学会了指定播放窗口以及播放画面大小的设置。
现在,我把实现原理以及实现过程,写成文档分享给大家。
# 函数介绍
## mciSendString 函数
> mciSendString函数向MCI设备发送命令字符串。 在命令字符串中指定发送命令的设备。mciSendString是用来播放多媒体文件的API指令,可以播放MPEG、AVI、WAV、MP3等
>
> 函数声明
>
> ```c++
> MCIERROR mciSendString(
> LPCTSTR lpszCommand,
> LPTSTR lpszReturnString,
> UINT cchReturn,
> HANDLE hwndCallback
> );
> ```
>
> 参数
>
> - lpszCommand
> 指向指定MCI命令字符串的以NULL结尾的字符串的指针。 有关列表,请参阅多媒体命令字符串。
> - lpszReturnString
> 指向接收返回信息的缓冲区的指针。 如果不需要返回信息,该参数可以为NULL。
> - cchReturn
> 由lpszReturnString参数指定的返回缓冲区的大小(以字符为单位)。
> - hwndCallback
> 如果在命令字符串中指定了“notify”标志,则处理回调窗口。
>
> 返回值
>
> - 如果成功返回零,否则返回错误。
## GetDlgItem 函数
> 获取窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。
>
> 函数声明
>
> ```c++
> HWND GetDlgItem(
> HWN DhDlg, // handle to dialog box
> int nIDDlgItem // control identifier
> );
> ```
>
> 参数
>
> - hDlg
>
> 标识含有控件的对话框。
>
> - nlDDlgltem
>
> 指定将被检索的控件标识符。
>
> 返回值
>
> - 如果函数调用成功则返回值为给定控件的窗口句柄。如果函数调用失败,则返回值为NULL,表示为一个无效的对话框句柄或一个不存在的控件。若想获得更多错误信息,请调用GetLastError函数。
# 实现原理
mciSendString函数的使用不是很复杂,关键是理解mci的命令。
对于设置视频播放在指定窗口的命令是:
```
open 视频文件路径 parent 窗口句柄 style 窗口WS_CHILD风格
```
例如,本文中为:open "test.wmv" alias myvideo parent 123 style 0x40000000。
对于设置视频播放画面的位置及其大小的命令是:
```
put 视频文件路径 window at 起始坐标X 起始坐标Y 画面宽度 画面高度
```
例如,本文中为:put myvideo window at 0 0 800 440。注意,put 命令要放在 play 指令之前执行。
# 编程实现
```c++
void PlayVideoInWindow(char *pszFileName, HWND hWnd, int x, int y, int iWidth, int iHeight)
{
char szSetWindowsMci[MAX_PATH] = { 0 };
char szSetVideoSizeMci[MAX_PATH] = { 0 };
// 构造mci打开视频命令, 设置视频播放的窗口
::wsprintf(szSetWindowsMci, "open \"%s\" alias myvideo parent %u style %u", pszFileName, hWnd, WS_CHILD);
// 构造mci视频播放位置大小命令, 设置视频播放的窗口
::wsprintf(szSetVideoSizeMci, "put myvideo window at %d %d %d %d", x, y, iWidth, iHeight);
// 打开视频, 指定窗口
::mciSendString(szSetWindowsMci, NULL, 0, NULL);
// 设置视频播放位置及画面大小
::mciSendString(szSetVideoSizeMci, NULL, 0, NULL);
// 播放视频
::mciSendString("play myvideo", NULL, 0, NULL);
}
```
# 程序测试
在项目中调用上述封装好的函数进行测试,调用部分代码为:
```c++
void CmciSendString_PlayVideo_TestDlg::OnBnClickedAbort()
{
// TODO: 在此添加控件通知处理程序代码
int x = 0, y = 0;
int iWidth = 800;
int iHeight = 440;
// 获取控件的句柄
HWND hWnd = ::GetDlgItem(m_hWnd, IDC_STATIC_VIDEO);
// 在指定窗口中播放, 并设置画面位置大小
PlayVideoInWindow("test.wmv", hWnd, x, y, iWidth, iHeight);
}
```
测试结果
运行测序,点击“Play Video”,可以看到视频画面成功显示在了静态框空间中,而且视频画面位置起点为 (0, 0),大小也为 800x440,所以,测试成功。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/ffc80e5fab0080d560740ca5d89c625a.writebug)
# 总结
代码不是很多,关键是要熟悉mci命令。这个不需要刻意去背,可以先了解有这个知识点,等到真正需要用到的时候,再去深入检索研究就好。
没有合适的资源?快使用搜索试试~ 我知道了~
精选_使用mciSendString在指定窗口里播放视频文件并设置播放视频画面大小_源码打包
共21个文件
h:5个
cpp:3个
ico:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 147 浏览量
2022-03-09
16:19:31
上传
评论 1
收藏 123KB ZIP 举报
温馨提示
使用mciSendString在指定窗口里播放视频文件并设置播放视频画面大小
资源推荐
资源详情
资源评论
收起资源包目录
524401836357236.zip (21个子文件)
mcisendstring-play-video
src
mciSendString_PlayVideo_Test.sln 1008B
mciSendString_PlayVideo_Test
mciSendString_PlayVideo_Test.h 544B
stdafx.h 1KB
mciSendString_PlayVideo_Test.cpp 2KB
mciSendString_PlayVideo_TestDlg.cpp 4KB
mciSendString_PlayVideo_Test.rc 12KB
mciSendString_PlayVideo_TestDlg.h 773B
resource.h 2KB
res
mciSendString_PlayVideo_Test.rc2 712B
mciSendString_PlayVideo_Test.ico 66KB
demon64X64.ico 17KB
mciSendString_PlayVideo_Test.aps 56KB
ReadMe.txt 4KB
mciSendString_PlayVideo_Test.vcxproj.filters 2KB
stdafx.cpp 153B
targetver.h 226B
mciSendString_PlayVideo_Test.vcxproj 6KB
mciSendString_PlayVideo_Test.v12.suo 29KB
Debug
mciSendString_PlayVideo_Test.exe 125KB
LICENSE 1KB
README.md 5KB
共 21 条
- 1
资源评论
- 2301_813162422023-12-23感谢资源主的分享,很值得参考学习,资源价值较高,支持!
工具盒子
- 粉丝: 58
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功