1C#写音乐播放器,附带个人代码和控件使用说明

1C#写音乐播放器,附带个人代码和控件使用说明


2024年4月14日发(作者:)

WindowsMediaPlayer控件研究

我的那个定时提醒程序中要用到它,初步使用问题已解决。基本使用步骤如下:

一、往控件箱中添加此控件:

二、往窗体上拖控件

三、=XXXX;()即可。

平常应用就这三步就OK了。但是,我想写个播放器的话,就遇到了一些问题。

在dotnet中使用非基于dotnet的控件,需要做一些额外的事,不过这些事vs

已经帮我们做好了,当我们拖了此控件进窗体时,vs会自动调用,

用它根据原有的dll或ocx生成一个用AxHost类包装的新的一组程序集(更为精

确的描述见msdn),于是根据生成两个文件:

、。这两个文件中包含了转化后的

类。包装后的控件继承自。

这是第一个问题,控件怎么使用呢?如果是拖控件,很简单,无论如何都能有效

的使用。但是,如果手工new创建控件的实例呢?那就不一定了。

我做过种种实验,获得如下的结论:

在非可视化类中无法创建有UI的控件的实例,或者是在没有把实例加入到一个

可视化的容器中时。

我实验了下面的代码:

owsMediaPlayer

owsMediaPlayer();

(wmp);

wmp=new

="约定.mp3";

();

这几行代码不一定能运行。发现,如果这几行代码写在窗体的构造函数中,哪怕

show出来都不能运行,只有写在Load或Load之后的事件中,并且把窗体

show出来才有运行,否则会抛出一个错误:引发类型为

“+InvalidActiveXStateException”的异

常。网上有些人也遇到这个问题,其实都没有谈到点子上。甚为遗憾。

是不是不show就一定不能运行呢?我拖了个播放器控件放窗体上,在

InitializeComponent后面写了行play的代码,能运行。可见,这中间有蹊跷

啊。我比较了上面的代码跟拖上去生成的代码,有两点不同:

一、拖控件生成的代码为多一对

((rtInitialize)(1)).BeginInit()/En

dInit()

二、拖的控件多了一行:te=

(()

(ect("te")));我查了MSDN,ocxstate是控件

状态。用于持久化控件的状态的。com组件的状态信息被写在对应窗体的资源

文件中,用记事本打开窗体资源文件就可以看到。在手工创建中,这个ocxstate

是没法赋值的。

我试了加入BeginInit、EndInit,没用,可见问题是出在控件状态问题上。没有

办法了。


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713080447a2178986.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信