MFC如何控制视频切换(更新)

qingfeng029 2012-05-14 10:28:56
大家好,(上个帖子代码有点乱,重新发一个)我用Windows Media Player控件播放视频,VC接收串口数据后,根据不同数据播放对应的视频,现在有个问题,就是播放视频中再发送另一数据就无法切换播放,怎么回事呢?调试程序时发现程序不执行切换代码,只能执行一次(可播放任一个),就算发送同一个数据也不能重新播放视频?是没有清空数据缓存吗?我已经加了SetInBufferCount(0);也不行 帮忙看看吧,谢谢大家!!
void CPlayerDlg::OnOnCommMscomm1() 
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码

variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<1;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<1;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
UpdateData(FALSE); //更新编辑框内容
m_ctrlComm.SetInBufferCount(0);


if(m_strRXData==0x01)
{

LPCSTR url="c:\\1.swf";
m_Player.SetUrl(url);
}

else if(m_strRXData==0x02)
{

LPCSTR url="c:\\2.swf";
m_Player.SetUrl(url);
}


m_strRXData为收到的串口数据
...全文
128 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingfeng029 2012-05-14
  • 打赏
  • 举报
回复
我每次都只发一个字节,怎么去掉呢?直接给m_strRXData赋值会报错,“'operator =' is ambiguous”[Quote=引用 1 楼 的回复:]
m_strRXData在播放之后应该去掉最前端的那个字节,否则一直在处理第一个接收到的字节
[/Quote]
三条猫 2012-05-14
  • 打赏
  • 举报
回复
m_strRXData在播放之后应该去掉最前端的那个字节,否则一直在处理第一个接收到的字节
qingfeng029 2012-05-14
  • 打赏
  • 举报
回复
谢谢你,也可以实现[Quote=引用 4 楼 的回复:]
像这样修改吧

C/C++ code

void CPlayerDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k……
[/Quote]
qingfeng029 2012-05-14
  • 打赏
  • 举报
回复
恩,谢谢。刚接触VC一个月,感觉好多都不懂...谢谢你,按你说的可以实现了[Quote=引用 3 楼 的回复:]
你定义的m_strRXData是一个CString吧,要删除第一个字符
m_strRXData.Delete(0);

if(m_strRXData==0x01) //这个写法不妥

应该是取第一个字符m_strRXData.GetAt(0);来比较?

楼主的写法感觉怪异...最好看看MSDN中CString的例子
[/Quote]
向立天 2012-05-14
  • 打赏
  • 举报
回复
串口接收数据的部分正常么
fishion 2012-05-14
  • 打赏
  • 举报
回复
像这样修改吧

void CPlayerDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE bt = 0;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码

variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<1;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<1;k++) //将数组转换为Cstring型变量
{
bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
UpdateData(FALSE); //更新编辑框内容
m_ctrlComm.SetInBufferCount(0);


if(bt ==0x01)
{

LPCSTR url="c:\\1.swf";
m_Player.SetUrl(url);
}

else if(bt ==0x02)
{

LPCSTR url="c:\\2.swf";
m_Player.SetUrl(url);
}
三条猫 2012-05-14
  • 打赏
  • 举报
回复
你定义的m_strRXData是一个CString吧,要删除第一个字符
m_strRXData.Delete(0);

if(m_strRXData==0x01) //这个写法不妥

应该是取第一个字符m_strRXData.GetAt(0);来比较?

楼主的写法感觉怪异...最好看看MSDN中CString的例子

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧