VS2010中ActiveX插件Shockwave Flash Object的显示与隐藏

背景】最近在使用Shockwave Flash Object插件播放swf视频时,需要对视频进行显示和隐藏的操作。但是缺遇到了问题,这里跟大家一起分享,希望我的方法能够解决大家类似的问题,并探讨问题的原因。

方法】我尝试的方法有两个:

1.显示隐藏插件;

2.通过控件窗口大小;

下面说一说我使用这两个方法过程中遇到的问题。

方法一:

MFC的控件显示和隐藏,大家都知道的常用方法时ShowWindow(int cmdShow),这也是我首先想到和使用的。

显示控件:GetDlgItem(IDC_SHOCKWAVEFLASH)->ShowWindow(TRUE);

隐藏控件:GetDlgItem(IDC_SHOCKWAVEFLASH)->ShowWindow(FALSE);

但却没有任何的效果,我的系统是Win10,使用VS2010进行开发。

这是我产生的疑问,是不是环境发生了不知道的变化,再试试其他的控件。

这时用自带的静态文本控件进行了测试,显示和隐藏控制正常。

方法一的问题:对Shockwave Flash Object插件使用ShowWindow没有作用。

方法二:

隐藏控件:m_flashPlayer.MoveWindow(0,0,0,0,TRUE);

显示控件:m_flashPlayer.MoveWindow(0,0,MY_WIDTH,MY_HEIGHT,TRUE);

这种方法需要配合flash播放的暂停和开始。

但也遇到了问题,再MoveWindow时,程序运行有时莫名的卡死。

经过多次尝试仍无找到视频卡死的原因。

方法二问题:MoveWindow时造成Shockwave Flash Object插件播放swf视频卡死。

这个问题无限循环中,没有结束条件,至到再次使用MoveWindow。

 

在尝试透明flash的背景时,用Button按钮做背景透明测试,发现了一个现象。

拖入Button控件后,使用GetDlgItem(IDC_SHOCKWAVEFLASH)->ShowWindow(FALSE);

此时控件隐藏的效果发生了。

就这样我找到了解决问题的方法。

 

解决方法:

第一、添加一个按钮控件;

第二、显示;

             GetDlgItem(IDC_BUTTON1)->ShowWindow(TRUE); //显示该控件

第三、将该控件移除显示区域; 

            GetDlgItem(IDC_BUTTON1)->MoveWindow(-5,-5,5,5,TRUE);

第四、按照逻辑需要进行插件的显示和隐藏操作。

 

使用这种方法的具体原因,可能和控件窗口的消息机制有关系。希望大家指点。

 

你可能感兴趣的:(C/C++,VS2010)