在C#下用MicrosoftAgent创建超酷语言精灵

Author: 王凯明  From:Internet


      C#作为Microsoft .Net战略下的新兴语言,有其不可比拟的强大功能。作为一种RAD语言,它有Visual Basic快速开发应用程序的优点,又不乏C  语言的面相对象的优良特性。
      本文就通过介绍利用Microsoft Agent来创建一个超酷用户界面(就像Office2000那种办公助手的界面,并有语音朗读功能)来向大家展示一下用C#进行Windows应用程序快速开发的优点。
  一 概述
  微软的Office2000中用到了一些被称为“办公助手”(Office Assistance)的精灵来给用户提供帮助,这样做的效果是显而易见的,大家可以得到很有效的帮助并且使用户界面显得非常友好。现在,我们只要使用Microsoft Agent(基于COM),我们就可以在自己的程序中使用这种精灵来给程序增光添彩。用这种精灵,我们可以实现语音的朗读、表演动画甚至还可以实现语音识别呢!
 
  二 要求
  (1)微软公司视窗2000服务器版或视窗 XP 版
  (2).Net FrameWrok SDK Beta 2版
  (3)Microsoft Agent核心组建
  (4)Microsoft Agent的精灵:吉尼(Genie)、么林(Merlin)、罗比(Robby)和皮蒂(Peedy)
  (5)至少有一个英语的Text-to-Speech引擎(现在还找不到中文的)
  (6)微软运行时发音API4.0a
  (如果还要实现语音识别功能的话,还要有微软的语音识别引擎)
  所有这些都可以在http://microsoft.com/msagent/downloads.htm下载。另外,必须要安装Office2000(Office97是不行的)。
 
  三 实现方法
  1.打开VS.Net,新建一个工程,不妨取名为CoolUI。图示如下:
 
  2.创建用户界面。
  选择菜单:工具->自定义工具箱,并选择Microsoft Agent Control 2.0组件,图示:
 
  将Microsoft Agent Control控件添加到窗体上(在程序运行时是看不到窗体是的Microsoft Agent控件的,只有在设计界面时它才显示出来),并课设计窗体如下:
 
  将主窗体的Text属性设置为“CoolUI”;将左边三个按钮的Text属性分别设置为“导入精灵”、“朗读文本”、“隐藏精灵”;将textBox的Text属性设置为“Type anything here for the character to read for you!(Only English)”,Multiline属性设置为True。
 
  3.简单的用户界面已经完成,现在我们来进行代码部分的工作:
  首先,添加using AgentObjects;到代码的开始处。其次,在我们的类里添加私有数据成员:private IAgentCtlCharacterEx Character;(这就是我们要用到的精灵的对象)。修改构造函数如下:
  public Form1()
  {
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent();
  button2.Enabled=false;//先使下面的两个按钮无效
  button3.Enabled=false;
 
  //
  // TODO: Add any constructor code after InitializeComponent call
  //
  }
  接着,添加左边三个按钮的鼠标单击的消息相应函数:
  private void button1_Click(object sender, System.EventArgs e)
  private void button2_Click(object sender, System.EventArgs e)
  private void button3_Click(object sender, System.EventArgs e)
  代码如下:
  private void button1_Click(object sender, System.EventArgs e)
  {
  axAgent1.Characters.Load("Genie", (object)"GENIE.ACS");//导入吉尼这个精灵
  Character = axAgent1.Characters["Genie"];
  Character.LanguageID = 0x409;//把语言设置为英语,这里不能是中文
 
  Character.Show(null);//显示精灵
 
  button1.Enabled=false;//重新设置按钮的有效性
  button2.Enabled=true;
  button3.Enabled=true;
  }
 
  private void button2_Click(object sender, System.EventArgs e)
  {
  if(textBox1.Text.Length == 0) //如果没有字符的话,就不读
  return; 
 
  Character.Speak(textBox1.Text, null);//让精灵朗读文本
  }
 
  private void button3_Click(object sender, System.EventArgs e)
  {
  Character.Play("Wave");
  Character.Play("Hide");//隐藏精灵
  }
 
  所有完整的代码如下:
  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;
  using AgentObjects;
 
  namespace CoolUI
  {
  /// <summary>
  /// Summary description for Form1.
  /// </summary>
  public class Form1 : System.Windows.Forms.Form
  {
  private AxAgentObjects.AxAgent axAgent1;
  private IAgentCtlCharacterEx Character;
 
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.Button button3;
  /// <summary>
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.Container components = null;
 
  public Form1()
  {
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent();
  button2.Enabled=false;//先使下面的两个按钮无效
  button3.Enabled=false;
 
  //
  // TODO: Add any constructor code after InitializeComponent call
  //
  }
 
  /// <summary>
  /// Clean up any resources being used.
  /// </summary>
  protected override void Dispose( bool disposing )
  {
  if( disposing )
  {
  if (components != null) 
  {
  components.Dispose();
  }
  }
  base.Dispose( disposing );
  }
 
  #region Windows Form Designer generated code
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
  System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
  this.textBox1 = new System.Windows.Forms.TextBox();
  this.button1 = new System.Windows.Forms.Button();
  this.button2 = new System.Windows.Forms.Button();
  this.button3 = new System.Windows.Forms.Button();
  this.axAgent1 = new AxAgentObjects.AxAgent();
  ((System.ComponentModel.ISupportInitialize)(this.axAgent1)).BeginInit();
  this.SuspendLayout();
  // 
  // textBox1
  // 
  this.textBox1.Location = new System.Drawing.Point(112, 24);
  this.textBox1.Multiline = true;
  this.textBox1.Name = "textBox1";
  this.textBox1.Size = new System.Drawing.Size(224, 152);
  this.textBox1.TabIndex = 2;
  this.textBox1.Text = "Type anything here for the character to read for you!(Only English)";
  // 
  // button1
  // 
  this.button1.Location = new System.Drawing.Point(16, 24);
  this.button1.Name = "button1";
  this.button1.TabIndex = 1;
  this.button1.Text = "导入精灵";
  this.button1.Click  = new System.EventHandler(this.button1_Click);
  // 
  // button2
  // 
  this.button2.Location = new System.Drawing.Point(16, 80);
  this.button2.Name = "button2";
  this.button2.TabIndex = 1;
  this.button2.Text = "朗读文本";
  this.button2.Click  = new System.EventHandler(this.button2_Click);
  // 
  // button3
  // 
  this.button3.Location = new System.Drawing.Point(16, 136);
  this.button3.Name = "button3";
  this.button3.TabIndex = 1;
  this.button3.Text = "隐藏精灵";
  this.button3.Click  = new System.EventHandler(this.button3_Click);
  // 
  // axAgent1
  // 
  this.axAgent1.Enabled = true;
  this.axAgent1.Location = new System.Drawing.Point(320, 176);
  this.axAgent1.Name = "axAgent1";
  this.axAgent1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axAgent1.OcxState")));
  this.axAgent1.Size = new System.Drawing.Size(32, 32);
  this.axAgent1.TabIndex = 0;
  // 
  // Form1
  // 
  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  this.ClientSize = new System.Drawing.Size(360, 213);
  this.Controls.AddRange(new System.Windows.Forms.Control[] {
  this.button3,
  this.button2,
  this.textBox1,
  this.button1,
  this.axAgent1});
  this.Name = "Form1";
  this.Text = "CoolUI";
  ((System.ComponentModel.ISupportInitialize)(this.axAgent1)).EndInit();
  this.ResumeLayout(false);
 
  }
  #endregion
 
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main() 
  {
  Application.Run(new Form1());
  }
 
  private void button1_Click(object sender, System.EventArgs e)
  {
  axAgent1.Characters.Load("Genie", (object)"GENIE.ACS");//导入吉尼这个精灵
  Character = axAgent1.Characters["Genie"];
  Character.LanguageID = 0x409;//把语言设置为英语,这里不能是中文
 
  Character.Show(null);//显示精灵
 
  button1.Enabled=false;//重新设置按钮的有效性
  button2.Enabled=true;
  button3.Enabled=true;
  }
 
  private void button2_Click(object sender, System.EventArgs e)
  {
  if(textBox1.Text.Length == 0) //如果没有字符的话,就不读
  return; 
 
  Character.Speak(textBox1.Text, null);//让精灵朗读文本
  }
 
  private void button3_Click(object sender, System.EventArgs e)
  {
  Character.Play("Wave");
  Character.Play("Hide");//隐藏精灵
  }
  }
  }
 
  4.好了,现在完成了所有的工作了,安Ctrl+F5试试效果吧!
 
  怎么样,还不错吧。
 
  四.总结
  从以上的例子,我们可以发现用C#做Windows平台下的开发是相当迅速而有效的。其实上面的例子还可以大大扩充,使之实现像电子小说阅读、英文听力测试、英文单词学习等功能,读者不妨一试。

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

全面剖析VB.NET(2)
透过IL看C#系列
防止winform假死新技术,visual studio 2005自带的控件
Hessian(C#)介绍及使用说明
使用C#来开发.NET CF 蓝牙通信模块
利用C#重启远程计算机
透过IL看C# (外一篇)——警惕常量陷阱
使用C#开发一个简单的P2P应用
C#Builder实现POP3信箱的监视
国外C#开源系统一览表 ,C# Open Source