调用ActiveX控件编写播放器时,遇到了不少问题!

发现MS.NET2003中缺少对一些动态链接库的引用!
在调用ActiveX等多媒体控件时,需要用到的MediaPlayer.dll 和 AxMediaPlayer.dll需要自己生成。
首先用下面的命令为媒体播放器控件:msdxm.ocx 生成 MediaPlayer.dll 和 AxMediaPlayer.dll。
aximp c:\winnt\system32\msdxm.ocx

而通常msdxm.ocx中的ActiveX控件都未注册!
再运行regsvr32 msdxm.ocx手动注册便生成需要的动态连接库文件.
再如图2所示,在项目中添加对MediaPlayer.dll 和 AxMediaPlayer.dll的引用;
并在程序中插入:using MediaPlayer便完成了整个调用过程!


播放器如图:
C#中对ActiveX控件的调用


源程序代码如下:
C#中对ActiveX控件的调用using System;
C#中对ActiveX控件的调用
using System.Drawing;
C#中对ActiveX控件的调用
using System.Collections;
C#中对ActiveX控件的调用
using System.ComponentModel;
C#中对ActiveX控件的调用
using System.Windows.Forms;
C#中对ActiveX控件的调用
using System.Data;
C#中对ActiveX控件的调用
using MediaPlayer;
C#中对ActiveX控件的调用
C#中对ActiveX控件的调用
namespace AdvancePlayer
{

C#中对ActiveX控件的调用    
/// Form1 的摘要说明。
C#中对ActiveX控件的调用    
/// </summary>
C#中对ActiveX控件的调用    public class Form1 : System.Windows.Forms.Form
{
C#中对ActiveX控件的调用        
private AxMediaPlayer.AxMediaPlayer axWindowsMediaPlayer1;
C#中对ActiveX控件的调用        
private System.Windows.Forms.OpenFileDialog openFileDialog1;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MainMenu mainMenu1;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemOpen;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemClose;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemInitSize;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemFullScreen;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemShowAudioCtrl;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemShowPositionCtrl;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemShowTrackbarCtrl;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemFile;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemVideo;
C#中对ActiveX控件的调用        
private System.Windows.Forms.MenuItem menuItemWindow;
C#中对ActiveX控件的调用        
C#中对ActiveX控件的调用        

C#中对ActiveX控件的调用        
/// 必需的设计器变量。
C#中对ActiveX控件的调用        
/// </summary>
C#中对ActiveX控件的调用        private System.ComponentModel.Container components = null;
C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
public Form1()
{
C#中对ActiveX控件的调用            
//
C#中对ActiveX控件的调用            
// Windows 窗体设计器支持所必需的
C#中对ActiveX控件的调用            
//
C#中对ActiveX控件的调用
            InitializeComponent();
C#中对ActiveX控件的调用
C#中对ActiveX控件的调用            
//
C#中对ActiveX控件的调用            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
C#中对ActiveX控件的调用            
//
C#中对ActiveX控件的调用
        }
C#中对ActiveX控件的调用

C#中对ActiveX控件的调用        
/// 清理所有正在使用的资源。
C#中对ActiveX控件的调用        
/// </summary>
C#中对ActiveX控件的调用        protected override void Dispose( bool disposing )
{
C#中对ActiveX控件的调用            
if( disposing )
{
C#中对ActiveX控件的调用                
if (components != null
{
C#中对ActiveX控件的调用                    components.Dispose();
C#中对ActiveX控件的调用                }

C#中对ActiveX控件的调用            }

C#中对ActiveX控件的调用            
base.Dispose( disposing );
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用


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

C#中对ActiveX控件的调用        
#endregion
C#中对ActiveX控件的调用

C#中对ActiveX控件的调用        
/// 应用程序的主入口点。
C#中对ActiveX控件的调用        
/// </summary>
C#中对ActiveX控件的调用        [STAThread]
C#中对ActiveX控件的调用        
static void Main() 
{
C#中对ActiveX控件的调用            Application.Run(
new Form1());
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemOpen_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            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|所有文件(*.*)|*.*";       
C#中对ActiveX控件的调用            
//打开的文件类型
C#中对ActiveX控件的调用
            if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
C#中对ActiveX控件的调用                axWindowsMediaPlayer1.FileName 
= openFileDialog1.FileName;
C#中对ActiveX控件的调用                
//如果打开的是音频文件,则禁止【视频】菜单组
C#中对ActiveX控件的调用
                if(openFileDialog1.FilterIndex == 2)
C#中对ActiveX控件的调用                    menuItemVideo.Enabled 
= false;
C#中对ActiveX控件的调用                
else
C#中对ActiveX控件的调用                    menuItemVideo.Enabled 
= true;
C#中对ActiveX控件的调用            }

C#中对ActiveX控件的调用        
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemClose_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.FileName 
= null;
C#中对ActiveX控件的调用            menuItemVideo.Enabled 
= false;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemInitSize_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.DisplaySize 
= MPDisplaySizeConstants.mpDefaultSize;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemFullScreen_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.DisplaySize 
= MPDisplaySizeConstants.mpFullScreen;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemShowAudioCtrl_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            menuItemShowAudioCtrl.Checked 
= !menuItemShowAudioCtrl.Checked;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowTracker 
= false;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowTracker 
= menuItemShowTrackbarCtrl.Checked;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowAudioControls 
= menuItemShowAudioCtrl.Checked;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemShowPositionCtrl_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            menuItemShowPositionCtrl.Checked 
= !menuItemShowPositionCtrl.Checked;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowPositionControls 
= menuItemShowPositionCtrl.Checked;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void menuItemShowTrackbarCtrl_Click(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用            menuItemShowTrackbarCtrl.Checked 
= !menuItemShowTrackbarCtrl.Checked;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowAudioControls 
= false;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowTracker 
= menuItemShowTrackbarCtrl.Checked;
C#中对ActiveX控件的调用            axWindowsMediaPlayer1.ShowAudioControls 
= menuItemShowAudioCtrl.Checked;
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
C#中对ActiveX控件的调用            
C#中对ActiveX控件的调用            openFileDialog1.OpenFile();
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用
C#中对ActiveX控件的调用        
private void Form1_Load(object sender, System.EventArgs e)
{
C#中对ActiveX控件的调用        
C#中对ActiveX控件的调用        }

C#中对ActiveX控件的调用    }

C#中对ActiveX控件的调用}

C#中对ActiveX控件的调用

C#中对ActiveX控件的调用 
        (图2)
      如图2中选中的AxMediaPlayer和MediaPlayer既需自己生成的dll,2003系统默认中无迹可寻!他们所起的作用便是实现对ActiceX中播放器相关的函数的调用!
      所以,对于多媒体应用程序的编写,关键在于了解对ActiveX相关控件的调用过程!
     
      充分使用.NET中的控件技术,无疑是最直接和最高效的选择,这给我们提供了很大的方便,以往很多需要自己编写的函数和功能,现在都为我们封装成了各种控件,直接调用便可实现!相比往日,效率提高了不少!但其中相关的实现过程和细节还是应该多加了解才好,毕竟,只有让其工作原理烂熟于心,才能将.NET这门强大的技术运用得炉火纯青!

相关文章:

  • 2021-07-15
  • 2022-12-23
  • 2022-12-23
  • 2021-09-07
  • 2021-10-18
  • 2022-12-23
  • 2021-07-17
  • 2022-02-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-25
  • 2021-06-18
相关资源
相似解决方案