调用WindowsMediaPlayer控件编写播放器时,遇到了不少问题!
发现MS.NET2003中缺少对一些动态链接库的引用!
在调用ActiveX等多媒体控件时,需要用到的MediaPlayer.dll 和 AxMediaPlayer.dll需要自己生成。
首先用下面的命令为媒体播放器控件:msdxm.ocx 生成 MediaPlayer.dll 和 AxMediaPlayer.dll。
使用
Visual Studio .NET 2003
命令提示运行下面命令
而通常 msdxm.ocx 中的 ActiveX 控件都未注册 !
先运行 regsvr32 msdxm.ocx 手动注册便生成需要的动态连接库文件 .
而通常 msdxm.ocx 中的 ActiveX 控件都未注册 !
先运行 regsvr32 msdxm.ocx 手动注册便生成需要的动态连接库文件 .
然后运行
aximp c:/windows/system32/msdxm.ocx
生成成功后会提示:
C:/Documents and Settings/Administrator>aximp c:/windows/system32/msdxm.ocx
生成的程序集
: C:/Documents and Settings/Administrator/MediaPlayer.dll
生成的程序集
: C:/Documents and Settings/Administrator/AxMediaPlayer.dll
再如图 2 所示,在项目中添加对 MediaPlayer.dll 和 AxMediaPlayer.dll 的引用;
并在程序中插入: using MediaPlayer 便完成了整个调用过程!
播放器如图 :

源程序代码如下:
再如图 2 所示,在项目中添加对 MediaPlayer.dll 和 AxMediaPlayer.dll 的引用;
并在程序中插入: using MediaPlayer 便完成了整个调用过程!
播放器如图 :

源程序代码如下:
using
System;
using
System.Drawing;
using
System.Collections;
using
System.ComponentModel;
using
System.Windows.Forms;
using
System.Data;
using
MediaPlayer; 
namespace
AdvancePlayer 
{ 
/**/
///
<summary>
///
Form1
的摘要说明。
///
</summary>
public
class
Form1 : System.Windows.Forms.Form 
{
private
AxMediaPlayer.AxMediaPlayer axWindowsMediaPlayer1;
private
System.Windows.Forms.OpenFileDialog openFileDialog1;
private
System.Windows.Forms.MainMenu mainMenu1;
private
System.Windows.Forms.MenuItem menuItemOpen;
private
System.Windows.Forms.MenuItem menuItemClose;
private
System.Windows.Forms.MenuItem menuItemInitSize;
private
System.Windows.Forms.MenuItem menuItemFullScreen;
private
System.Windows.Forms.MenuItem menuItemShowAudioCtrl;
private
System.Windows.Forms.MenuItem menuItemShowPositionCtrl;
private
System.Windows.Forms.MenuItem menuItemShowTrackbarCtrl;
private
System.Windows.Forms.MenuItem menuItemFile;
private
System.Windows.Forms.MenuItem menuItemVideo;
private
System.Windows.Forms.MenuItem menuItemWindow; 
/**/
///
<summary>
///
必需的设计器变量。
///
</summary>
private
System.ComponentModel.Container components =
null
;
public
Form1() 
{
// Windows
窗体设计器支持所必需的
InitializeComponent();
// TODO:
在
InitializeComponent
调用后添加任何构造函数代码
} 

/**/
///
<summary>
///
清理所有正在使用的资源。
///
</summary>
protected
override
void
Dispose(
bool
disposing ) 
{
if
( disposing ) 
{
if
(components !=
null
) 
{
components.Dispose();
}
}
base
.Dispose( disposing );
} 
Windows
窗体设计器生成的代码
#region
Windows
窗体设计器生成的代码

/**/
///
<summary>
///
设计器支持所需的方法
-
不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent() 
{
System.Resources.ResourceManager resources =
new
System.Resources.ResourceManager(
typeof
(Form1));
this
.openFileDialog1 =
new
System.Windows.Forms.OpenFileDialog();
this
.mainMenu1 =
new
System.Windows.Forms.MainMenu();
this
.menuItemFile =
new
System.Windows.Forms.MenuItem();
this
.menuItemOpen =
new
System.Windows.Forms.MenuItem();
this
.menuItemClose =
new
System.Windows.Forms.MenuItem();
this
.menuItemVideo =
new
System.Windows.Forms.MenuItem();
this
.menuItemInitSize =
new
System.Windows.Forms.MenuItem();
this
.menuItemFullScreen =
new
System.Windows.Forms.MenuItem();
this
.menuItemWindow =
new
System.Windows.Forms.MenuItem();
this
.menuItemShowAudioCtrl =
new
System.Windows.Forms.MenuItem();
this
.menuItemShowPositionCtrl =
new
System.Windows.Forms.MenuItem();
this
.menuItemShowTrackbarCtrl =
new
System.Windows.Forms.MenuItem();
this
.axWindowsMediaPlayer1 =
new
AxMediaPlayer.AxMediaPlayer();
((System.ComponentModel.ISupportInitialize)(
this
.axWindowsMediaPlayer1)).BeginInit();
this
.SuspendLayout();
//
// openFileDialog1
//
this
.openFileDialog1.FileOk +=
new
System.ComponentModel.CancelEventHandler(
this
.openFileDialog1_FileOk);
//
// mainMenu1
// 
this
.mainMenu1.MenuItems.AddRange(
new
System.Windows.Forms.MenuItem[]
{
this
.menuItemFile,
this
.menuItemVideo,
this
.menuItemWindow});
//
// menuItemFile
//
this
.menuItemFile.Index = 0; 
this
.menuItemFile.MenuItems.AddRange(
new
System.Windows.Forms.MenuItem[]
{
this
.menuItemOpen,
this
.menuItemClose});
this
.menuItemFile.Shortcut = System.Windows.Forms.Shortcut.CtrlF;
this
.menuItemFile.Text = "
文件
(&F)";
//
// menuItemOpen
//
this
.menuItemOpen.Index = 0;
this
.menuItemOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
this
.menuItemOpen.Text = "
打开
(&O)";
this
.menuItemOpen.Click +=
new
System.EventHandler(
this
.menuItemOpen_Click);
this
.menuItemOpen.Select +=
new
System.EventHandler(
this
.Form1_Load);
//
// menuItemClose
//
this
.menuItemClose.Index = 1;
this
.menuItemClose.Shortcut = System.Windows.Forms.Shortcut.CtrlC;
this
.menuItemClose.Text = "
关闭
(&C)";
this
.menuItemClose.Click +=
new
System.EventHandler(
this
.menuItemClose_Click);
//
// menuItemVideo
//
this
.menuItemVideo.Index = 1; 
this
.menuItemVideo.MenuItems.AddRange(
new
System.Windows.Forms.MenuItem[]
{
this
.menuItemInitSize,
this
.menuItemFullScreen});
this
.menuItemVideo.Shortcut = System.Windows.Forms.Shortcut.CtrlV;
this
.menuItemVideo.Text = "
视频
(&V)";
//
// menuItemInitSize
//
this
.menuItemInitSize.Index = 0;
this
.menuItemInitSize.Shortcut = System.Windows.Forms.Shortcut.CtrlI;
this
.menuItemInitSize.Text = "
默认尺寸
(&I)";
this
.menuItemInitSize.Click +=
new
System.EventHandler(
this
.menuItemInitSize_Click);
//
// menuItemFullScreen
//
this
.menuItemFullScreen.Index = 1;
this
.menuItemFullScreen.Shortcut = System.Windows.Forms.Shortcut.CtrlF;
this
.menuItemFullScreen.Text = "
全屏
(&F)";
this
.menuItemFullScreen.Click +=
new
System.EventHandler(
this
.menuItemFullScreen_Click);
//
// menuItemWindow
//
this
.menuItemWindow.Index = 2; 
this
.menuItemWindow.MenuItems.AddRange(
new
System.Windows.Forms.MenuItem[]
{
this
.menuItemShowAudioCtrl,
this
.menuItemShowPositionCtrl,
this
.menuItemShowTrackbarCtrl});
this
.menuItemWindow.Shortcut = System.Windows.Forms.Shortcut.CtrlW;
this
.menuItemWindow.Text = "
窗口
(&W)";
//
// menuItemShowAudioCtrl
//
this
.menuItemShowAudioCtrl.Checked =
true
;
this
.menuItemShowAudioCtrl.Index = 0;
this
.menuItemShowAudioCtrl.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
this
.menuItemShowAudioCtrl.Text = "
音频控制
(&U)";
this
.menuItemShowAudioCtrl.Click +=
new
System.EventHandler(
this
.menuItemShowAudioCtrl_Click);
//
// menuItemShowPositionCtrl
//
this
.menuItemShowPositionCtrl.Checked =
true
;
this
.menuItemShowPositionCtrl.Index = 1;
this
.menuItemShowPositionCtrl.Shortcut = System.Windows.Forms.Shortcut.CtrlP;
this
.menuItemShowPositionCtrl.Text = "
播放进度
(&P)";
this
.menuItemShowPositionCtrl.Click +=
new
System.EventHandler(
this
.menuItemShowPositionCtrl_Click);
//
// menuItemShowTrackbarCtrl
//
this
.menuItemShowTrackbarCtrl.Checked =
true
;
this
.menuItemShowTrackbarCtrl.Index = 2;
this
.menuItemShowTrackbarCtrl.Shortcut = System.Windows.Forms.Shortcut.CtrlT;
this
.menuItemShowTrackbarCtrl.Text = "
滚动条
(&T)";
this
.menuItemShowTrackbarCtrl.Click +=
new
System.EventHandler(
this
.menuItemShowTrackbarCtrl_Click);
//
// axWindowsMediaPlayer1
//
this
.axWindowsMediaPlayer1.Location =
new
System.Drawing.Point(0, -8);
this
.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1";
this
.axWindowsMediaPlayer1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWindowsMediaPlayer1.OcxState")));
this
.axWindowsMediaPlayer1.Size =
new
System.Drawing.Size(296, 280);
this
.axWindowsMediaPlayer1.TabIndex = 0;
//
// Form1
//
this
.AutoScaleBaseSize =
new
System.Drawing.Size(6, 14);
this
.BackColor = System.Drawing.SystemColors.Control;
this
.ClientSize =
new
System.Drawing.Size(292, 273);
this
.Controls.Add(
this
.axWindowsMediaPlayer1);
this
.ForeColor = System.Drawing.SystemColors.ControlText;
this
.Menu =
this
.mainMenu1;
this
.Name = "Form1";
this
.Text = "Form1";
this
.Load +=
new
System.EventHandler(
this
.Form1_Load);
((System.ComponentModel.ISupportInitialize)(
this
.axWindowsMediaPlayer1)).EndInit();
this
.ResumeLayout(
false
); 
}
#endregion

/**/
///
<summary>
///
应用程序的主入口点。
///
</summary>
[STAThread]
static
void
Main() 
{
Application.Run(
new
Form1());
}
private
void
menuItemOpen_Click(
object
sender, System.EventArgs e) 
{
openFileDialog1.Filter = "
视频文件
(*.avi;*.wmv;*.dat;*.mpg;*.mpeg;*.mov;*.wm;*.wma)|*.avi;*.wmv;*.dat;*.mpg;*.mpeg;*.mov;*.wm;*.wma|
音频文件
(*.wav;*.mp3;*.snd;*.au;*.midi;*.mid)|*.wav;*.mp3;*.snd;*.au;*.midi;*.mid|
所有文件
(*.*)|*.*";
//
打开的文件类型
if
(openFileDialog1.ShowDialog()==DialogResult.OK) 
{
axWindowsMediaPlayer1.FileName = openFileDialog1.FileName;
//
如果打开的是音频文件,则禁止【视频】菜单组
if
(openFileDialog1.FilterIndex == 2)
menuItemVideo.Enabled =
false
;
else
menuItemVideo.Enabled =
true
;
}
}
private
void
menuItemClose_Click(
object
sender, System.EventArgs e) 
{
axWindowsMediaPlayer1.FileName =
null
;
menuItemVideo.Enabled =
false
;
}
private
void
menuItemInitSize_Click(
object
sender, System.EventArgs e) 
{
axWindowsMediaPlayer1.DisplaySize = MPDisplaySizeConstants.mpDefaultSize;
}
private
void
menuItemFullScreen_Click(
object
sender, System.EventArgs e) 
{
axWindowsMediaPlayer1.DisplaySize = MPDisplaySizeConstants.mpFullScreen;
}
private
void
menuItemShowAudioCtrl_Click(
object
sender, System.EventArgs e) 
{
menuItemShowAudioCtrl.Checked = !menuItemShowAudioCtrl.Checked;
axWindowsMediaPlayer1.ShowTracker =
false
;
axWindowsMediaPlayer1.ShowTracker = menuItemShowTrackbarCtrl.Checked;
axWindowsMediaPlayer1.ShowAudioControls = menuItemShowAudioCtrl.Checked;
}
private
void
menuItemShowPositionCtrl_Click(
object
sender, System.EventArgs e) 
{
menuItemShowPositionCtrl.Checked = !menuItemShowPositionCtrl.Checked;
axWindowsMediaPlayer1.ShowPositionControls = menuItemShowPositionCtrl.Checked;
}
private
void
menuItemShowTrackbarCtrl_Click(
object
sender, System.EventArgs e) 
{
menuItemShowTrackbarCtrl.Checked = !menuItemShowTrackbarCtrl.Checked;
axWindowsMediaPlayer1.ShowAudioControls =
false
;
axWindowsMediaPlayer1.ShowTracker = menuItemShowTrackbarCtrl.Checked;
axWindowsMediaPlayer1.ShowAudioControls = menuItemShowAudioCtrl.Checked;
}
private
void
openFileDialog1_FileOk(
object
sender, System.ComponentModel.CancelEventArgs e) 
{
openFileDialog1.OpenFile();
}
private
void
Form1_Load(
object
sender, System.EventArgs e) 
{
}
}
}
(图 2 )
如图
2
中选中的
AxMediaPlayer
和
MediaPlayer
既需自己生成的
dll
,
2003
系统默认中无迹可寻!他们所起的作用便是实现对
ActiceX
中播放器相关的函数的调用!
所以,对于多媒体应用程序的编写,关键在于了解对 ActiveX 相关控件的调用过程!
充分使用 .NET 中的控件技术,无疑是最直接和最高效的选择,这给我们提供了很大的方便,以往很多需要自己编写的函数和功能,现在都为我们封装成了各种控件,直接调用便可实现!相比往日,效率提高了不少!但其中相关的实现过程和细节还是应该多加了解才好,毕竟,只有让其工作原理烂熟于心,才能将 .NET 这门强大的技术运用得炉火纯青!
所以,对于多媒体应用程序的编写,关键在于了解对 ActiveX 相关控件的调用过程!
充分使用 .NET 中的控件技术,无疑是最直接和最高效的选择,这给我们提供了很大的方便,以往很多需要自己编写的函数和功能,现在都为我们封装成了各种控件,直接调用便可实现!相比往日,效率提高了不少!但其中相关的实现过程和细节还是应该多加了解才好,毕竟,只有让其工作原理烂熟于心,才能将 .NET 这门强大的技术运用得炉火纯青!
netken
本文介绍了如何使用WindowsMediaPlayer控件创建播放器,并解决在.NET环境中遇到的问题,包括生成必要的动态链接库文件,以及如何在项目中正确引用这些控件。
4543

被折叠的 条评论
为什么被折叠?



