调用WindowsMediaPlayer控件编写播放器时,遇到了不少问题!
发现MS.NET2003中缺少对一些动态链接库的引用!
在调用ActiveX等多媒体控件时,需要用到的MediaPlayer.dll 和 AxMediaPlayer.dll需要自己生成。
首先用下面的命令为媒体播放器控件:msdxm.ocx 生成 MediaPlayer.dll 和 AxMediaPlayer.dll。
使用
Visual Studio .NET 2003
命令提示运行下面命令
而通常
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
便完成了整个调用过程!
播放器如图
:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/17feb978f63f4d36b338906e8936a5e2.jpg)
源程序代码如下:
using
System;
using
System.Drawing;
using
System.Collections;
using
System.ComponentModel;
using
System.Windows.Forms;
using
System.Data;
using
MediaPlayer;
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/28d5c12cc37045029b875e73a92d6bbe.gif)
namespace
AdvancePlayer
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/3defaf738f2543b0b2cfa8df0705f54d.gif)
{
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/5b129a5ac4634181aab25992d77fd64d.gif)
/**/
///
<summary>
///
Form1
的摘要说明。
///
</summary>
public
class
Form1 : System.Windows.Forms.Form
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/e9272cac16df4ba8903769ff04dcda3b.gif)
{
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;
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/e7bd3ba00b1c44ef8cc230014f341ed9.gif)
/**/
///
<summary>
///
必需的设计器变量。
///
</summary>
private
System.ComponentModel.Container components =
null
;
public
Form1()
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/da3965e91e364ceab21e3deb6177407f.gif)
{
// Windows
窗体设计器支持所必需的
InitializeComponent();
// TODO:
在
InitializeComponent
调用后添加任何构造函数代码
}
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/068c03f32b2e4d9e83e53c7594ae4e03.gif)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/92a34de1d47a4c12a86bb68c7400c008.gif)
/**/
///
<summary>
///
清理所有正在使用的资源。
///
</summary>
protected
override
void
Dispose(
bool
disposing )
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/945391bacbd946dda945d95fbc95ecb6.gif)
{
if
( disposing )
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/95ff41e3b35b46a1b22b53b8c75754e4.gif)
{
if
(components !=
null
)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/a318e4a641bc44948a0677ae4d4e7d04.gif)
{
components.Dispose();
}
}
base
.Dispose( disposing );
}
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/4d1497f6f6624266b0eb9cda0e7d5e4c.gif)
Windows
窗体设计器生成的代码
#region
Windows
窗体设计器生成的代码
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/92c9d82804ef4d318d473a60ce78954c.gif)
/**/
///
<summary>
///
设计器支持所需的方法
-
不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/23e79b18afab47069f4523e4cd500f42.gif)
{
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
//
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/511b6ad53d784f92ab52ca2794f8fcb6.gif)
this
.mainMenu1.MenuItems.AddRange(
new
System.Windows.Forms.MenuItem[]
{
this
.menuItemFile,
this
.menuItemVideo,
this
.menuItemWindow});
//
// menuItemFile
//
this
.menuItemFile.Index = 0;
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/b8598e0b8e1347699f496a1aaf7347eb.gif)
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;
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/5dc82e46f4c744069666820c51154add.gif)
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;
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/975ee6c9ba9e4a5d889b4b58fcf846e5.gif)
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
);
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/7475a64898e14923876913fb4b6b0476.gif)
}
#endregion
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/430e180ace134cdd893ea59d7c959385.gif)
/**/
///
<summary>
///
应用程序的主入口点。
///
</summary>
[STAThread]
static
void
Main()
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/16a69b087bb54a39bef0c18a1ee28169.gif)
{
Application.Run(
new
Form1());
}
private
void
menuItemOpen_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/b48171144b21409d9a4f3b3004c63c0d.gif)
{
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)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/338d8adc7d7d456c8bed0ff03e283e01.gif)
{
axWindowsMediaPlayer1.FileName = openFileDialog1.FileName;
//
如果打开的是音频文件,则禁止【视频】菜单组
if
(openFileDialog1.FilterIndex == 2)
menuItemVideo.Enabled =
false
;
else
menuItemVideo.Enabled =
true
;
}
}
private
void
menuItemClose_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/0efbf4bd7acb4109b56fa093d0e279f7.gif)
{
axWindowsMediaPlayer1.FileName =
null
;
menuItemVideo.Enabled =
false
;
}
private
void
menuItemInitSize_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/525ea553f082480386c2842576b1c43a.gif)
{
axWindowsMediaPlayer1.DisplaySize = MPDisplaySizeConstants.mpDefaultSize;
}
private
void
menuItemFullScreen_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/c7547d343b8c4dbf9f122cc3de505a8e.gif)
{
axWindowsMediaPlayer1.DisplaySize = MPDisplaySizeConstants.mpFullScreen;
}
private
void
menuItemShowAudioCtrl_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/a34aedbb4ec24e7f84604e7f095341bc.gif)
{
menuItemShowAudioCtrl.Checked = !menuItemShowAudioCtrl.Checked;
axWindowsMediaPlayer1.ShowTracker =
false
;
axWindowsMediaPlayer1.ShowTracker = menuItemShowTrackbarCtrl.Checked;
axWindowsMediaPlayer1.ShowAudioControls = menuItemShowAudioCtrl.Checked;
}
private
void
menuItemShowPositionCtrl_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/38153de73ce54f6b91df1990447337b4.gif)
{
menuItemShowPositionCtrl.Checked = !menuItemShowPositionCtrl.Checked;
axWindowsMediaPlayer1.ShowPositionControls = menuItemShowPositionCtrl.Checked;
}
private
void
menuItemShowTrackbarCtrl_Click(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/3946ea4bca9844b6a64dd69b82aa8371.gif)
{
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)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/49d278e8a3bc424f9a7b985e50523519.gif)
{
openFileDialog1.OpenFile();
}
private
void
Form1_Load(
object
sender, System.EventArgs e)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tolot/abe4dd2c5b804ed1834cc18ead99204b.gif)
{
}
}
}
(图
2
)
如图
2
中选中的
AxMediaPlayer
和
MediaPlayer
既需自己生成的
dll
,
2003
系统默认中无迹可寻!他们所起的作用便是实现对
ActiceX
中播放器相关的函数的调用!
所以,对于多媒体应用程序的编写,关键在于了解对
ActiveX
相关控件的调用过程!
充分使用
.NET
中的控件技术,无疑是最直接和最高效的选择,这给我们提供了很大的方便,以往很多需要自己编写的函数和功能,现在都为我们封装成了各种控件,直接调用便可实现!相比往日,效率提高了不少!但其中相关的实现过程和细节还是应该多加了解才好,毕竟,只有让其工作原理烂熟于心,才能将
.NET
这门强大的技术运用得炉火纯青!
netken