.NET中多媒体以及Flash播放问题(C#) 以及其他ActiveX控件使用说明

    对于.NET,要进行多媒体以及Flash的播放都是相当简单的,Microsoft帮我们完成了很多的功能,我们直接拿来使用就行了,但是对于ActiveX控件的使用,应注意下系统生成了什么,不多说直接开始。下面的例子以C#为例,其实其他的语言都差不多。
需要用到AxInterop.WMPLib.dll(播放多媒体)AxInterop.ShockwaveFlashObjects.dll(Flash)这两个.dll文件(在用WMP时还会用到Wmp.dll,这等会再说)。

简单的使用办法就是在窗口设计器界面的工具箱内,添加新的工具项(右键点击工具箱,点击“选择项”),然后选择Com组件,在里面找那个Windows Media Player,打上勾确定,就可以增加Windows Media Player控件到控件箱了。拖动此控件放置到设计器上,这样就在你的程序里嵌入Windows Media Player了。是不是非常简单。

刚才我用利用拖动向设计器中增加了一个WMP,那到底Windows帮我们做了那些事呢?

首先,在我们的项目引用中增加了2个引用"AxInterop.WMPLib"和"WMPLib",然后在我们的代码中增加了一点代码
AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer();
此时我们可以清楚的看到使用的是那个类,这个类就是属于AxInterop.WMPLib中的。他提供了对于此播放器的实例与属性配置。wmp.Url即需要播放的文件路径(相关信息可以参考MSDN中的说明)。

那如何在代码中控制其运行呢,这就要用到另外一个Dll了,wmp.Ctlcontrols是AxWindowsMediaPlayer已经集成好的一个类,它集成自IWMPControls,能完成Play,Pause,Stop等等功能。我们可以使用

wmp.Ctlcontrols.stop();

wmp.CtlControls.Play();

来控制。

以上的内容都比较简单,直接使用已经封装好的控件。

实际上,我们可以自己写个控件实现,最简单的当然就是在刚才做好的wmp基础上进行修改。
另外,还有一个类可以提供我们简单的使用WMPLib.WindowsMediaPlayerClass。


另外在使用这种COM组件的时候,需要注意一个问题,当我们自己去实例化AxWMPLib.AxWindowsMediaPlayer,并添加此控件时,经常容易遗漏一点。比如以下这样的代码就会出错。

 

 


                                AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer();
                                wmp.Enabled = true;
                                wmp.Location = new System.Drawing.Point( 0, 0 );
                                wmp.Name = "wmp";
                                wmp.Size = new System.Drawing.Size( 250, 200 );
                                wmp.TabIndex = 0;
                                this.panel.Controls.Add( wmp );

                                wmp.URL = Application.StartupPath + "/papers/" + src;
 
此时一旦给其属性URL赋值,那么就会马上出现错误:Exception of type ''System.Windows.Forms.AxHost+InvalidActiveXStateException'' was thrown.其实,这是由于Wmp组件尚未初始化完成,就开始对其赋值的原因。

当我们用拖动方式向其中增加时,我们仔细查看其中的代码可以发现,另外还存在几行代码,

 

                                ( ( System.ComponentModel.ISupportInitialize )( wmp ) ).BeginInit();
                                ( ( System.ComponentModel.ISupportInitialize )( wmp ) ).EndInit();
只有当我们完成( ( System.ComponentModel.ISupportInitialize )( wmp ) ).EndInit()之后,才能为其文件赋值。

播放AxInterop.ShockwaveFlashObjects.dll要简单得多,直接引用这个类库就可以了,不过这个类库在本地一般不那么容易找到,而且还存在版本问题,建议直接去网上下载一个,拿来使用就可以了,使用方法也差不多,同样注意一下需要EndInit()之后才能给文件地址flash.Media赋值才不会出现报错。

最后,其实,在用过很多ActiveX控件后,你会发现每个ActiveX都会有这样的情况,ocx的使用中会用到.resx文件中的内容,具体的情况参照关于ActiveX的文章。

文章出处:飞诺网(http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/200853/112388.html)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值