计算机程序的编程接口的制作方法

文档序号:6428278阅读:143来源:国知局

专利名称::计算机程序的编程接口的制作方法
技术领域
:本发明涉及软件和软件开发。更特别地,本发明涉及有助于应用程序和计算机硬件使用软件平台的编程接口。所附光盘简要说明此说明书所附的三张光盘存储代码名称为“Longhorn”的MicrosoftWindows操作系统的软件开发工具(SDK)。SDK包含代码名称为“Longhorn”的MicrosoftWindows操作系统的文档。三张光盘的重复拷贝也附在本说明书之后。三张光盘中的第一张光盘(3张光盘中的CD1)包含2003年10月22日创建的名为“lhsdk”的文件夹。此文件夹大小为586MB,包含9,692个子文件夹,且包含44,292个子文件。三张光盘中的第二张光盘(3张光盘中的CD2)包含2003年10月22日创建的名为“ns”的文件夹。此文件夹大小为605MB,包含12,628个子文件夹,且包含44,934个子文件。三张光盘中的第三张光盘(3张光盘中的CD3)包含2003年10月22日创建的名为“ns”的文件夹。此文件夹大小为575MB,包含9,881个子文件夹,且包含43,630个子文件。三张光盘的每一张上的文件均可以在基于Windows的计算设备(如,IBM-PC或其等价)上执行,这些计算设备执行Windows品牌的操作系统(如WindowsNT、Windows98、Windows2000、WindowsXP等等)。包含三张光盘的每一张上的文件加入这里作为参考。三张光盘的每一张都是CD-R,且符合ISO9660标准。三张光盘的每一张的内容均符合美国信息交换标准码(ASCII)。
背景技术
:很早以前起,计算机软件就被归类为“操作系统”软件或“应用”软件。广义上来说,应用软件是用于为计算机用户执行特定任务(如解数学方程或支持字处理)的软件。操作系统是管理和控制计算机硬件的软件。操作系统的的目标是使得计算机资源对应用程序员可用而同时隐去了实际控制硬件所需的复杂性。操作系统通过总称为应用编程接口或API的函数使得资源可用。术语API也被用于指这些的函数中的一个。这些函数通常根据它们对应用程序员提供何种资源或服务来分组。应用软件通过调用单独的API函数来请求资源。API函数也用作将操作系统提供的消息和信息转发回应用软件的方法。除了硬件的改变,驱动操作系统软件进化的另一个因素是简化和加速应用软件开发的需要。应用软件开发是令人畏惧的任务,有时需要几年的开发者时间来创建有上百万行代码的复杂程序。对流行的操作系统,如各种版本的MicrosoftWindows操作系统,应用软件开发者每年编写成千上万个使用此操作系统的不同应用软件。需要严谨的可用操作系统基础来支持如此多的各种应用开发者。通常,通过使操作系统更加复杂可以使应用软件的开发变得更简单。即,如果一个函数对许多不同的应用程序有用,则最好是写一次并将其包括在操作系统中,而不是要求很多的软件开发者多次编写该函数以包括在很多不同的应用中。以此方式,如果操作系统广泛支持很多应用软件所需的共同功能,则可以在应用软件开发成本和时间上实现显著的节省。无论操作系统和应用软件之间的界线画在何处,很清楚的是对有用的操作系统来说,在操作系统和计算机硬件及应用软件之间的API和操作系统自身有效的内部操作同等重要。在过去几年中,因特网(总的来说,网络技术)的广泛采用已经改变了计算机软件开发者的眼界。过去,软件开发者着眼于单站点软件应用,以用于独立的桌面计算机,或通过局域网(LAN)连接到有限数量的其他计算机的基于LAN的计算机。这样的软件应用通常被称为“紧缩包(shrinkwrapped)”的产品,因为这样的软件是在紧缩包的包装中营销和销售的。应用软件使用定义良好的API来访问计算机的底层操作系统。随着因特网的发展并得到了广泛的接受,业界开始认识到在万维网(或简单地“Web”)的各个网站上驻留应用软件的能力。在联网的世界中,来自任何地方的客户机可以向在各个地点驻留的基于服务器的应用提交请求,并在几分之一秒的时间内接收返回的响应。然而,这些Web应用软件通常是使用起初为独立的计算设备或本地联网的计算机开发的同一操作系统平台开发的。不幸的是,在某些情况下,这些应用不能充分迁移到分布式计算领域。底层平台就不是用支持无限数量互连计算机的思想来构建的。为了适应由因特网带来的到分布式计算环境转变,微软公司开发了称为“.NET”框架(读做“点Net”)的网络软件平台。Microsoft.NET是用于连接人、信息、系统和设备的软件。该平台允许开发者创建在因特网上执行的Web服务。用于微软.NETTM框架的一组API函数伴随着这样的动态转变。随着.NETTM框架的使用变得越来越常见,已建立了提高此平台效率和/或性能的多种方法。发明人已开发出一组独特的API函数来应对提高的效率和/或性能。发明概要一种编程接口提供生成应用软件、文档、媒体表示和其他内容的函数。这些函数允许开发者获取来自操作系统、对象模型服务或其他系统或服务的服务。在一个实施例中,这些函数允许开发者生成图形用户接口。相同的编号在整个附图中被用来引用类似的部件。图1展示网络架构,在其中客户机使用常规协议通过因特网访问Web服务;图2是用于网络平台的软件架构的方框图,它包括应用编程接口(API);图3是由API及各种API函数的功能分类支持的表示子系统的方框图;图4是可以执行所述软件架构的全部或部分的示范计算机的方框图;及图5、6、7、8、9、10、11、12、13、14、15和16展示编程接口的各种实施例。详细说明本发明涉及用于开发者可以在其上构建Web应用和服务的网络平台的应用编程接口(API)。更特别地,所描述的示范API是对使用网络平台的操作系统,如微软公司创建的.NETTM框架的操作系统。.NETTM框架是在分布式计算环境中实现的Web服务和Web应用软件的软件平台。它使用开放的通讯标准,在合作执行特殊任务的松散耦合的Web服务之间通讯,代表下一代的因特网计算。在上述实施例中,网络平台使用XML(可扩展标记语言),一种用于描述数据的开放标准。XML由万维网联盟(W3C)管理。XML被用于定义网页和企业对企业文档上的数据元素。XML使用类似于HTML的标签结构,然而,HTML定义如何显示元素,而XML定义那些元素包含什么。HTML使用预定义的标签,而XML允许标签由页面的开发者来定义。这样,实际上可以识别任何数据项,允许Web页面起着类似数据库记录的作用。通过使用XML和其他开放协议,如简单对象访问协议(SOAP),网络平台允许集成可以根据用户需要定制的各种服务。虽然,结合XML和其他开放标准来说明在此所述的实施例,这对本发明的操作不是必须的。如在此所用,短语应用编程接口或API包括使用方法或函数调用及远程调用(如,代理、占位程序(stub)关系)和SOAP/XML调用的传统接口。应理解,在下面的一些名字空间说明中,特定类、接口、枚举和代理的说明是空的。这些类、接口、枚举和代理更完全的说明可以在上面引用的存储SDK的光盘的主题中找到。示范网络环境图1展示网络环境100,在其中可以实现网络平台,如.NETTM框架。网络环境100包括代表性的Web服务102(1),...,102(N),它们提供可以通过网络104(如,因特网)访问的服务。Web服务(总地使用编号102来引用)是可编程的应用组件,它们可以重用并通过网络104以程序方式交互,这种交互通常通过工业标准的Web协议进行,如XML、SOAP、WAP(无线应用协议)、HTTP(超文本传输协议)和SMTP(简单邮件传输协议),虽然也可以使用通过网络和Web服务交互的其他方法,如远程过程调用(RPC)或对象代理类型技术。Web服务可以是自我描述的并通常根据消息的格式和顺序来定义。Web服务102可以由其他服务(如通讯链接106所示)或软件应用,如Web应用110(如通讯链接112和114所示)直接访问。所示的每个Web服务102包括一个或多个服务器,这些服务器执行处理对特殊服务的请求的软件。这样的服务通常维护存储返回给请求者的信息的数据库。Web服务可以配置成执行各种不同服务中的任何一种。Web服务的例子包括登录校验、通知、数据库存储、股票报价、位置目录、映射、音乐、电子钱包、日历/时间表、列表、电话收听、新闻和信息、游戏、票务等等。Web服务可以互相和与其他应用合并来构建智能的交互操作。网络环境100也包括使用Web服务102(如通讯链接122所示)和/或Web应用110(如通讯链接124、126和128所示)的代表性的客户机设备120(1)、120(2)、120(3)、120(4)、...、120(M)。客户机也可以使用标准协议互相通讯,如客户机120(3)和120(4)之间的示范XML链接130所示。客户机设备(总地使用编号120来引用)可以用很多不同的方法来实现。可能的客户机实现的例子包括,而不限制,便携式计算机、固定计算机、输入板PC、电视机/机顶盒、无线通讯设备、个人数字助理、游戏终端、打印机、复印机和其他智能设备。Web应用110是一应用程序它设计成在网络平台上运行,并可以在对来自客户机120的请求进行处理和服务时使用Web服务102。Web应用110由在编程框架132之上运行的一个或多个软件应用130组成,编程框架132在一个或多个服务器或其他计算机系统上执行。注意,Web应用10的一部分可以实际上驻留一个或多个客户机120上。另外,Web应用110可以和客户机120上的其他软件协调来实际完成它的任务。编程框架132是支持由应用开发者开发的应用软件和服务的结构。它通过支持多种语言,允许多种语言的开发和无缝集成。它支持开放的标准,如SOAP,并封装底层的操作系统和对象模型服务。框架对多种编程语言提供健壮和安全的执行环境并提供安全、集成的类库。框架132是包含应用编程接口(API)层142、通用语言运行库(CLR)层144和操作系统/服务层146的多层架构。这种分层的架构允许对各层进行更新和修改而不影响框架的其他部分。通用语言规范(CLS)140允许各种语言的设计者编写可以访问底层库功能的代码。规范140起语言设计者和库设计者之间的合约的作用,可用于提升语言互操作性。通过遵从CLS,以一种语言编写的库可以由以其他语言编写的代码模块直接访问,从而获得以一种语言编写的代码模块和以另一种语言编写的代码模块之间的无缝集成。CLS的一个详细实施例在由参与者在ECMATC39/TG3中创建的ECMA标准中说明。读者请参考ECMA在www.ecma.ch的网站。API层142表示应用130可以调用它们以访问层146提供的资源和服务的函数组。通过对网络平台展现API函数,应用软件开发者可以创建用于分布式计算系统的Web应用软件以充分利用网络资源和其他Web服务,而无需理解实际上如何操作或提供那些网络资源的复杂内部机制。再者,Web应用软件可以用任何数量的编程语言来编写,并转换为由通用语言运行库144支持并作为通用语言规范140的部分包括的中间语言。以此方式,API层142可以为广泛的不同应用提供各种方法。另外,框架132可以配置为支持由通过容纳框架的服务器134远程执行的远程应用软件进行的API调用。代表性应用软件148(1)和148(2)各自驻留在客户机120(3)和120(M)上,它们可以通过网络104直接或间接调用API层来使用API函数。框架也可以在客户机上实现。客户机120(3)表示其中框架150在客户机上实现的情况。此框架可以等同于基于服务器的框架132或根据客户机的目的进行修改。另外,基于客户机的框架可以在客户机为有限功能或专用功能的设备,如手机、个人数字助理、手持计算机或其他通讯/计算设备的情况下进行精简。开发者的编程框架图2更详细地展示编程框架132。通用语言规范(CLS)层140支持以各种语言130(1)、130(2)、130(3)、130(4)、...、130(K)编写的应用软件。这样的应用语言包括VisualBasic、C++、C#、COBOL、Jscript、Perl、Eiffel、Python等等。通用语言规范140规定特性的子集或有关特性的规则,若遵从这些规则,则允许各种语言进行通讯。例如,某些语言不支持可能由通用语言运行库144支持的特定类型(如,“int*”类型)。在此情况,通用语言规范140不包括该类型。另一方面,由所有或大多数语言支持的类型(如“int[]”类型)被包括在通用语言规范140中,从而库开发者可以不必使用它而确保那些语言可以处理它。此通讯能力带来以一种语言编写的代码模块和以另一种语言编写的代码模块之间的无缝集成。由于不同的语言特别适合于各种特殊的任务,语言之间的无缝集成允许开发者对特殊的代码模块选择特殊的语言,且以不同语言编写的模块能够使用该代码模块。通用语言运行库144通过跨越语言继承支持无缝的多语言开发,并对多种编程语言提供健壮和安全的执行环境。关于通用语言规范140和通用语言运行库144的更多信息,读者请参考一起待批准的2000年6月21日提交、标题为“编译多种语言的方法和系统”的专利申请(序列号09/598,105)和2000年7月10日提交、标题为“统一数据类型系统和方法”的申请(序列号09/613,289),将它们包含在此作为参考。框架132封装操作系统146(1)(如Windows品牌的操作系统)和对象模型服务146(2)(如组件对象模型(COM)或分布式COM)。操作系统146(1)提供常规函数,如文件管理、通知、事件处理、用户接口(如,窗口、菜单、对话框等等)、安全、身份验证、校验、进程和线程、内存管理等等。对象模型服务146(2)提供连接其他对象的接口来执行各种任务。对API层142做出的调用被传递给通用语言运行库层144,以由操作系统146(1)和/或对象模型服务146(2)在本地执行。API142将API函数分组到多个名字空间中。名字空间本质上定义类、接口、代理、枚举和结构的集合,它们统称为“类型”并提供相关功能的特定集合。类表示管理下的堆分配的数据,它具有引用赋值语义。代理是面向对象的函数指针。枚举是特殊类型的表示命名常量的值类型。结构表示静态分配的数据,它具有值赋值语义。接口定义其他类型可以实现的合约。通过使用名字空间,设计者可以将一组类型组织成分层的名字空间。设计者能够从该组类型创建多个组,每组至少包括一个逻辑上显现出相关的功能的类型。在示范实施例中,API142组织为包括三个根名字空间。应注意,虽然在图2中只展示了三个根名字空间,也可以在API142中包括另外的根名字空间。API142中展示的三个根名字空间是用于表示子系统的第一个名字空间200(包括用于用户接口外壳的名字空间202),用于Web服务的第二个名字空间204,及用于文件系统的第三个名字空间206。每个组可以分配一个名字。例如,表示子系统名字空间200中的类型可以分配名字“Windows”,而文件系统名字空间206中的类型可以分配名字“Storage”。命名的组可以在用于系统层API的单个“全局根”名字空间,如总系统名字空间下面进行组织。通过选择并加上顶层标识符前缀,每个组中的类型可以容易地通过层次名字来引用,层次名字包含所选择的加在包含该类型的组名字前面的顶层标识符前缀。例如,文件系统名字空间206内的类型可以使用层次名字“System.Storage”来引用。以此方式,各个名字空间200、204和206成为系统名字空间的主要分支,并可以带有这样的标志,其中各个名字空间用命名符加上前缀,如前缀“System.”。表示子系统名字空间200涉及编程和内容开发。它提供用于处理应用软件、文档、媒体表示和其他内容的产生的类型。例如,表示子系统名字空间200提供允许开发者获取来自操作系统146(1)和/或对象模型服务146(2)的服务的编程模型。外壳名字空间202涉及用户接口功能。它提供允许开发者在他们的应用中嵌入用户接口功能的类型,并进一步允许开发者扩展用户接口功能。Web服务名字空间204涉及支持创建各种应用的架构,这些应用包括如象在内联网上的两个伙伴之间操作的聊天应用那样简单的应用,和/或象用于成百万用户的可伸缩Web服务那样复杂的应用。由于只需要使用适合于特殊解决方案复杂度的那些部分,上述架构最好是高度可变。该架构提供构建各种规模和复杂度的基于消息的应用的基础。该架构或框架提供用于基本消息、安全消息、可靠消息和事务消息的API。在下述实施例中,将相关API以精心设计来平衡实用性、可用性、可扩展性和版本可管理性的方式分解为名字空间的层次。文件系统名字空间206涉及存储。它提供用于信息存储和检索的类型。除了框架132之外,提供编程工具210来辅助开发者构建Web服务和/或应用。编程工具210的一个例子是VisualStudioTM,它是由微软公司提供一种多语言编程工具套件。根API名字空间图3更详细地展示表示子系统200的一部分。在一个实施例中,根据在其中周期地连接名字字符串的层次命名协定来识别名字空间。例如,通过根名字“System.Windows”来识别表示子系统名字空间。在“System.Windows”名字空间内有另一个用于各种控件的名字空间,称为“System.Windows.Controls”,它进一步标识称为“System.Windows.Controls.Primitives”的另一个用于原语的名字空间(未标出)。记住了这样的命名协定,下面提供API142所选择的名字空间的概要,虽然使用其他命名协定能产生同等效果。如图3所示,表示子系统200包括多个名字空间。图3所示的名字空间所表示的是表示子系统200的特殊实施例。表示子系统200的其他实施例可以包括一个或多个另外的名字空间或可以忽略图3所示名字空间中的一个或多个。表示子系统200是用于API142的很多表示功能的根名字空间。控件名字空间310包括用来构建信息显示的控件,如用户界面,及允许用户与应用交互的类。例子控件包括在显示屏上创建按钮的“Button”、在显示屏上生成单选按钮的“RadioButton”,在显示屏上创建菜单的“Menu”、在显示屏上创建工具栏的“ToolBar”、在显示屏上生成图形的“Image”及创建信息的层次视图的“TreeView”。通过嵌套和摆放多个元素可以创建某些的控件。控件具有隐藏用于创建控件的元素的逻辑模型,从而简化编程模型。可以由开发者或用户(如,通过客户在用户界面按钮的外观和行为)设置控件的样式和主题。某些控件具有允许个人调整单个控件的样式的可定位组件。另外,由应用开发者和组件开发者可以生成控件的子类并扩展控制。使用矢量图来呈现控件使得可以重新设置它们的大小来适应特殊接口或其他显示的要求。控件能够使用动画来增强例如用户接口的交互感觉并显示动作和反应。控件名字空间控件名字空间310包括一个或多个面板,面板是测量和安排其子控件(如,嵌套的元素)的控件。例如,“DockPanel”面板通过将每个子控件泊放到显示的上边、左边、下边或右边,并用其他数据填充余下的空间来安排子控件。例如,特殊的面板可以将菜单和工具栏泊放到显示的上边、状态栏泊放到显示的下边、文件夹列表泊放到显示的左边,并用消息列表填充余下的空间。上面提到,System.Windows.Controls.Primitives是包括多个控件的名字空间,这些控件是通常由在System.Windows.Controls名字空间中的控件的开发者以及由创建他们自己的控件的开发者使用的组件。这些组件的例子包括“Thumb和RepeatButton”。另一个组件“ScrollBar”是使用四个重复按钮(一个用于“向上一行”、一个用于“向下一行”、一个用于“向上翻页”,一个用于“向下翻页”)和“Thumb”来创建的,用于拖动当前视图到文档中另一位置的。在另一个例子中,“ScrollViewer”是使用两个“ScrollBars”和一个“ScrollArea”创建以提供可滚动区域的控件。下面的列表包括由System.Windows.Controls名字空间显现的例子类。例如,这些类允许用户和应用通过各种输入和输出能力以及附加的显示能力进行交互。●AccessKey-AccessKey是包装一个字符的FrameworkElement元素,表示将把表示字符的键盘记号装饰作为键盘助记符来接收。缺省的键盘记号装饰为下划线。●Audio-音频元素。●Border-在另一个元素周围画出边界、背景或两者。●Button-表示内在地响应点击(Click)事件的标准按钮组件。●Canvas-定义在其中用户可以通过相对于Canvas区域的坐标明确地定位子元素的区域。●CheckBox-使用CheckBox向用户给出如真/假这样的选项。CheckBox允许用户从选项列表中进行选择。CheckBox控件使用户选择选项的组合。●CheckedChangedEvengArgs-这个类包含有关CheckedChangedEvent事件的附加信息。●CheckStateChangedEventArgs-这个类包含有关CheckStateChangedEvent事件的附加信息。●ClickEventArgs-包含有关Click事件的信息。●ColumnStyle-表示可改变的ColumnStyle对象。●ColumnStyles-可改变模式的IList对象,它为可改变的(Changeable)元素的集合。●ComboBox-ComboBox控件。●ComboBoxItem-实现可在ComboBox内可选的项目的控件。●ContactPickerDialog-允许用户选择一个或多个联系。●ContactPropertyRequest-允许应用通过ContactPickerDialog请求有关联系属性的信息。此类不能被继承。●ContactPropertyRequestCollection-表示ContactPropertyRequest对象的集合。●ContactSelection-有关来自代码名称为“WinFS”的MicrosoftWindows文件系统或MicrosoftActiveDerectory(活动目录)的所选择的联系的信息。●ContactSelectionCollection-表示ContactSelection对象的集合。●ContactTextBox-支持选取联系或联系的属性的编辑控件。●ContactTextBoxSelectionChangedEventArgs-ContactTextBoxSelectionChanged事件的参数。●ContactTextBoxTextChangedEventArgs-ContactTextBoxTextChanged事件的参数。●ContactTextBoxTextResolvedEventArgs-TextResotvedToContact事件的参数。●ContentChangedEventArgs-ContentChangedEvent的事件参数。●ContentControl-具有单条内容的所有控件的基类。●ContentPresenter-当添加内容时,在内容控件的样式之内使用ContentPresenter来表示在控件的可视树中的位置(色彩模板)。●ContextMenu-定义菜单的控件,菜单中包含用户将引用的选择。●ContextMenuEventArgs-在ContextMenuEvent事件发生时发送的数据。●Control-表示对所有用户交互元素的基类。此类向其子类提供基本的属性集合。●Decorator-将效果应用到单个子元素之上或应用到单个子元素周围的元素(如边界Border)的基类。●DockPanel-定义用户在其中可以彼此水平或垂直地排放子元素的区域。●DragDeltaEventArgs-此类包含有关DragDeltaEvent事件的附加信息。●FixedPanel-FixedPanel是在固定格式文档中使用以便包含用于分页的固定的页根元素。FixedPanel一次显示分页内容的一页,或将其作为可滚动的页堆栈。●FlowPanel-FlowPanel用于划分、缩进和对齐超出单行长度的内容。FlowPanel提供分行和对齐属性,它能在容件的内容流,例如文本,可能超出单行长度时使用。●Frame-可以加载另一个标记树内容的区域。●Generator-Generator是为ItemsControls生成UI的对象,它在GeneratorFactory的监控下工作。●GeneratorFactory-GeneratorFactory负责为ItemsControl生成UI。它维护控件的ItemsCollection(扁平视图)中的项与对应的UIElement之间的关联。该控制的项一容件能向Factory请求实际产生UI的的生成器(Generator)。●GridPanel-定义包含列和行的网格区域。●HeaderItemsControl-包含多个项且具有标题的所有控件的基类。●HorizontalScrollBar-水平滚动条(SchrollBar)类。●HorizontalSlider-水平滑动器(Slider)类。●HyperLink-HyperLink类实现浏览控制。缺省的表示器为TextPresenter。●Image-提供在文档或应用中包含图像的简单方法。●IncludeContactEventArgs-传递给ContactPickerDialog.IncludeContact事件的处理程序的参数。●ItemCollection-维护控件内离散的项的集合。提供支持改变集合内容及获取有关内容的数据的方法和属性。●ItemsChangedEventArgs-由GeneratorFactory触发ItemsChanged事件以通知布局组件,该项集合已被更改。●ItemsControl-有多个子控件的所有控件的基类。●ItemsView-ItemsView提供ItemCollection的平视图。●KeyboardNavigation-KeyboardNavigation类提供在所关注的控件之间进行逻辑(Tab键)和方向性(箭头)浏览的方法。●ListBox-实现可选择的项列表的控件。●ListItem-实现ListBox内可选择的项的控件。●Menu-定义供用户调用的选项的菜单的控件。●MenuItem-Menu的子项。可以选择MenuItem来调用命令。MenuItem可以为分隔符。MenuItem可以为子菜单的标题。可以选定或不选定MenuItem。●PageViewer-表示包含分页控件、工具栏和页面栏控件的文档查看复合控件。●PaginationCompleteEventArgs-PaginationCompleteEvent的事件参数。●PaginationProgressEventArgs-PaginationProgressEvent的事件参数。●Pane-提供以标记语言定义窗口属性(如,“XAML”)而不打开新窗口的方法。●Panel-对所有的Panel元素提供基类。为了实例化Panel元素,使用导出的具体类。●RadioButton-RadioButton实现有两种状态(真或假)的选项按钮。●RadioButtonList-该控件用作组合RadioButton的控件并且是处理RadioButton互斥性的控件。该RadioBnttonListSelector继承。该RadioButtonList本质上是SingleSelectionSelector,且Selection的概念(来自Selecton)是断切它不组合的RodioBntton的Check的属性●RowStyle-可改变的模式Changeable元素。●RowStyles-可改变的模式IList对象,它是Changeable元素的集合。●ScrollChangeEventArgs-ScrollChangeEventArgs描述以滚动状态的变化。●ScrollViewer-●SelectedItemsCollection-对Selector中所选择的项的容件。●SelectionChangedEventArgs-对选择改变事件处理程序的输入。●SimpleText-SimpleText是轻量级的、多行的、单一格式文本元素,用在用户接口(UI)情况中。SimpleText显现几个和Text相同的格式化属性,且通常可以用于以降低通用性为低价来换取性能提高。●StyleSelector-StyleSelector允许应用软件编写者提供客户风格的式选择逻辑。例如,当类Bug作为内容时,对Pril错误使用特殊样式而对Pri2错误使用不同的样式。应用软件编写者可以覆盖导出的选择器类中的SelectStyle方法,并将此类的实例赋值到ContentPresenter类上的StyleSelector属性。●Text-表示支持呈现多种格式文本的文本控件。Text最好在应用UI内使用;更高级的文本情况得益于TextPanel的附加特性集合。在多数需要相对简单的文本支持的情况下,由于它轻量级的本质和特性的范围,Text是首选的元素。●TextBox-表示提供接受文本输入的可编辑区域的控件。●TextChangedEventArgs-TextChangedEventArgs表示与由TextRange.SetText()触发的事件相关的RoutedEventArgs的一类型。●TextPanel-格式化文本、改变文本大小并画出文本。TextPanel支持多行文本和多行文本格式。●ToolTip-当用户悬停在控件上方时显示信息的控件。●ToolTipEventArgs-ToolTipEvent发生时发送的数据。●TransformDecorator-TransformDecorator包含子控件并对其应用指定的转换。TransformDecorator实现在其本地(转换前)坐标中测量和安排子控件的逻辑,以使得在转换之后子控件紧密适合装饰器的空间并使用最大的区域。因而该子控制不需要知道已对它应用转换的知识。●UIElementCollection-UIElementCollection是UIElement的有序集合。●ValueChangedEventArgs-ValueChangedEventArgs类包含有关ValueChangedEvent事件的附加信息。●VerticalScrollBar-垂直滚动条类。●VerticalSlider-垂直滑动器类。●Video-在当前的用户坐标系统内的指定矩形中播放视频流或音频流文件。●VisibleChangedEventArgs-VisibleChangedEventArgs类包含有关VisibleChangedEvent事件的附加信息。System.Windows.Controls名字空间也包含各种枚举。下面的列表包含和System.Windows.Controls名字空间关联的例子枚举。●CharacterCase-当键入文本时指定TextBox控件中字符的大小写。●CheckState-指定如复选框这样可以选定、不选定或设置为中间状态的控件的状态。●ClickMode-指定何时触发Click事件。●ContactControlPropertyPosition-控制联系的属性的位置和显示。●ContactPickerDialogLayout-指定ContactPickerDialog如何显示选择的属性。●ContactPropertyCategory-在属性有用户可以选择的多个值的情况下,指定将哪个值作为缺省值。例如,当从ContactPickDialog请求电话号码,且用户选择工作及家庭电话号码作为联系时,若指定“Work-工作”作为优先类别,工作电话号码作为缺省选择出现。用户随后能使用UI另外选择家庭电话号码。●ContactPropertyType-指定ContactPickerDialog会向用户请求的联系的属性。●ContactType-指定哪个联系的类型在ContactPickDialog吕显示。●Direction-此枚举由GeneratorFactory和Generator使用来指定生成器产生UI的方向。●Dock-指定子元素在DockPanel内的泊放位置。●GeneratorStatus-此枚举由GeneratorFactory使用以表示其状态。●KeyNavigationMode-TabNavigation属性的类型指定容器在发生Tab导航时如何移动着眼点。●MenuItemBehavior-定义MenuItem可以具有的不同行为。●MenuItemType-定义MenuItem的不同放置类型。●Orientation-滑动器方向类型。●PageViewerFit-选择页如何拟合到PageViewer的客户区域中。●PageViewerMode-在下拉模式列表中选择当前反映的PageViewer模式。●ScrollerVisibility-ScrollerVisibility定义滚动条的可视行为。●SelectionMode-指定ListBox的选择行为。“Position”是和System.Windows.Controls名字空间关联的例子结构。Generator的用户使用此结构描述位置。例如,为了从项列表的头正向开始生成,指定位置(-1,0)和方向Forward。为了从列表的末端反向开始生成,指定位置(-1,0)和方向Backwark)。为了在有下标k的元素之后生成项,指定位置(k,0)和方向Forward。下面的列表包含和System.Windows.Controls名字空间关联的例子代理。●CheckedChangedEventHandler-此代理由CheckedChangedEvent事件的处理程序使用。●CheckStateChangedEventHandler-此代理由CheckStateChangedEvent事件的处理程序使用。●ClickEventHandler-表示处理Click事件的方法。●ContactTextBoxSelectionChangedEventHandler-ContactTextBoxSelectionChanged事件的代理处理程序。●ContactTextBoxTextChangedEventHandler-ContactTextBoxTextChanged事件的代理处理程序。●ContactTextBoxTextResolvedEventHandler-TextResolvedToContact事件的代理处理程序。●ContentChangedDelegate-ContentChangedEvent事件的代理。●ContextMenuEventHandler-用于处理ContextMenuEvent事件的回调用类型。●DragDeltaEventHandler-此代理由DragDeltaEvent事件的处理程序使用。●IncludeContactEventHandler-ContactPickerDialog.IncludeContact事件的处理程序。●ItemsChangedEventHandler-由接收ItemsChangedEventArgs的处理程序使用的代理。●OpenedEventHandler-ContactPickerDialog.Opened事件的处理程序。●PaginationCompleteDelegate-PaginationCompleteEvent事件的代理。●PaginationProgressDelegate-PaginationProgressEvent事件的代理。●ScrollChangeEventHandler-此代理由ScrollChangeEvent事件的处理程序使用。●SelectionChangedEventHandler-用于处理选择改变事件的代理类型。●TextChangedEventHandler-由接收TextChangedEventArgs的处理程序使用的代理。●ToolTipEventHandler-用于处理ToolTipEvent事件的回调用类型。●ValueChangedEventHandler-此代理由ValueChangedEvent事件的处理程序使用。●VisibleChangedEventHandler-此代理由VisibleChangedEvent事件的处理程序使用。另一个名字空间,System.Windows.Controls.Atoms,是System.Windows.Controls名字空间的子名字空间。System.Windows.Controls.Atoms包括关联的控件、事件参数和事件处理程序。下述列表包含和System.Windows.Controls.Atoms名字空间关联的例子类。●PageBar-表示可滚动的分页控件。●PageElement-呈现分页内容的特定页。被呈现的页由PageSource属性指定。●PageHoveredEventArgs-PageHoveredEventArgs提供有关鼠标指针悬停在何处的信息。●PageScrolledEventArgs-PageScrolledEventArgs包含涉及PageScrolled事件的信息。●PageSelectedEventArgs-当选择新的行/列范围时触发PageSelectedEvent事件。●PageSelector-PageSelector允许用户选择将被显示的页的行/列范围。●PageSource-识别将被分页的内容来源。它也提供用于格式化分页内容的属性和方法。下述列表包含和System.Windows.Controls.Atoms名字空间关联的例子代理。●PageHoveredEventHandler-此代理由PageHoveredEvent事件的处理程序使用。●PageScrolledEventHandler-此代理由事件的处理程序使用。●PageSelectedEventHandler-此代理由PageSelectedEvent事件的处理程序使用。System.Windows.Controls.Primitives名字空间是System.Windows.Controls名字空间的另一个子名字空间。如上所述,Primitives子名字空间包括由其他更复杂的控件用作原语的控件。下述列表包括和System.Windows.Controls.Primitives名字空间关联的例子类。●ButtonBase-当在导出的类中覆盖时,定义相关的事件和属性,并●Popup-创建包含内容的弹出窗口的控件。●RangeBase-表示有特定范围的元素的基类。这样的元素的例子包括滚动条和进度条(progressbar)。这个类定义相关的事件和属性,并提供事件的处理程序。●RepeatButton-RepeatButton控件在Click事件发生时添加重复语义。●ScrollArea-ScrollArea是用于滚动的有效元素。它包含剪辑的内容并提供属性来展现内容的偏移量和范围。它也提供缺省的输入处理,以使得可以用程序或通过键盘或鼠标滚轮来驱动滚动。●ScrollBar-ScrollBar类。●Selector-从它们的子元素中选取项的控件的基类。●Slider-Slider类。●Thumb-拇指控件支持滚动条的基本拖动功能和窗口的重设大小。“IEnsureVisible”是和System.Windows.Controls.Primitives名字空间关联的例子接口。IEnsureVisible在可视元素上实现以将子可视元素滚动/移动到视图中。下面的列表包含和System.Windows.Controls.Primitives名字空间关联的例子枚举。●ArrowButtonStates-●CloseModeType-描述弹出窗口如何响应各种鼠标事件。●Part-Part枚举用于表示构成滚动条的控件的语义用途。●PartStates-ScrollBar的部件状态。●PlacementType-描述应在屏幕上的何处放置弹出窗口。●SizeBoxStates-文档名字空间文档名字空间312是用于创建具有丰富格式和丰富语义的文档的语义和格式元素的集合。在一个实施例中,“元素”是主要结合元素的类层次结构(称为“树”)使用的类。这些元素可以是交互的(如,通过键盘、鼠标或其他输入设备接收用户输入),可以呈现图像或对象,并可以辅助安排其他元素。例子元素包括实现通用块的“Block”元素、表示包括表主体内容的“Body”元素、包含表内的表格数据的“Cell元素”、表示包含在表头中的内容的“Header”元素,及用于将内容分成多个页面的“PageBreak”元素。下面的列表包含由System.Windows.Documents名字空间展现的例子类。●AdaptiveMetricsContext-AdaptiveMetricsContext提供适应性流格式文档的根元素。一旦在AdaptiveMetricsContext元素中封装了子面板,则该面板的内容由ReadingMetricsEngine(读取度量引擎RME)处理。子面板的大小被用来计算任何列的数量和大小及最佳字体大小和行高。●Block-实现不包括缺省呈现行为的通用块元素。●BlockElement-实现所有Block元素的基类。●Body-表示构成Table元素主体的内容。●Bold-实现从Inline导出的Bold元素。●BreakRecord-存储跨分页符继续格式化分页的内容所需的信息。从这个类继承以提供分页支持。该类为抽象类。●Cell-Cell包含Table内的表格数据。Cell元素包含在Row中。●CellCollection-表格单元的有序集合。●Column-Column元素被用于分配GridPanel或Table的内容。●ColumnCollection-ColumnCollection是Column的有序集合。●ColumnResult-表示列的视图相关信息。●ContainerParagraphResult-提供对Paragraph对象的计算出的布局参数的访问,Paragraph对象仅包含其他Paragraph对象。●ContentPosition-表示内容在段落中的位置。从这个类继承来描述相关内容的位置。这是一个抽象类。●Document-Document类的的目的是分离文档内容和它周围的UI“色彩”。“分离”指用户可以制作文档而无需考虑(且不会连累)它的UI。Document类包含文档内容,通常是TextPanel或FixedPanel及其子元素。可视元素树(缺省为PageViewer)通过WPP控件样式机制和此元素关联。●DocumentPage-表示和经受分页的文档的页关联的控件的布局信息。从此类继承进行实现来描述这些控件的布局信息。这是一个抽象类。●DocumentPageParagraphResult-提供对计算出的受分页影响的对象的布局参数的访问。●FindEngine-搜索算法的基类。●FindEngineFactory-搜索算法工厂。●FixedPage-提供对固定格式布局文档中的内容的单个页的访问。●Footer-表示构成Table元素页脚的内容。●Header-表示构成Table元素表头的内容。●Heading-实现将文本作为标题呈现的块级别元素。●HyphenationDictionary-HyphenationDictionary表示用于在应用中提供连字支持的字典。它可以包括内部字典和对外部字典的引用两者。内部字典有较高的优先级并在外部字典的条目之前应用。●Hyphenator-Hyphenator对象维护对HyphenationDictionary内的连字数据的引用同时也执行连字操作。●Inline-实现不招致任何缺省呈现行为的通用Inline元素。●InlineElement-实现作为所有内部元素基类的通用内部元素。●Italic-实现从Inline导出的Italic元素。●LineBreak-表示强制换行的标记元素。●LineResult-提供对计算出的一行文本行信息的访问。●List-实现List元素。List是设计为使用如黑点或编号这样的记号格式化的块级别元素。●ListElementItem-实现ListElementItem,它支持如黑点或编号这样的记号。●Note-实现Note元素,它类似于HTML中的注释元素。●PageBreak-表示用来将内容划分成各页的标记元素。●PageDescriptor-实现PageDescriptor,它存储创建分页布局所需的信息。●Paragraph-实现用于在段落中呈现文本的块级别元素。呈现行为和HTML段落元素类似。●ParagraphResult-提供对计算出的Paragraph对象布局参数的访问。●Row-在GridPanel或Table元素内定义行。●RowCollection-RowCollection表示Row的有序集合。●RowGroup-指定Table或GridPanel中一组行的缺省属性。●Section-实现通用容件元素。呈现行为和HTML中的DIV元素类似。●SmallCaps-实现内部SmallCaps元素。SmallCaps是作为字符的小体大写字母版本呈现以用于(如在标题内)强调的印刷体。●Subscript-表示内部Subscript元素。Subscript字符被写在在其他字符的正下方、左下方、或右下方。●Superscript-表示内部Superscript元素。Superscript字符通常是字母或数字并在其他字符的正上方、左上方、或右上方呈现。●Table-Table被用于使用标记语言(如,“XAML”)以表格形式显示复杂的数据。●TextArray-用于文本访问和处理的基础API。●TextChangedEventArgs-TextChangedEventArgs定义当TextArray改变时发送的事件参数。●TextElement-TextElement对TextTree提供TextRange工具。它是不可变的、连续的有固定端点的TextRange。它提供ContentElement输入、聚焦点和事件支持。它还提供DependencyObject属性支持。●TextNavigator-这可以枚举文本内容。实现可移动的TextPosition。它可以根据运行的或定位在文本中已知位置的文本移动。●TextParagraphResult-提供对计算出的文本布局参数的访问,这些参数包括浮动的对象和图形。●TextPosition-这是表示TextArray中特定位置的对象。表示文本中位置的紧凑对象在文本改变时自动地保持位置。比较操作仅适用于同一TextArray(同一上下文)内的位置。TextPosition可以是静态的或可移动的。IsChangeable属性区分位置的类型。●TextRange-TextRange是向零或多个子范围的通用关联提供属性的抽象类。在导出类中定义子范围处理。●TextRangeMovable-TextRangeMovable是可移动TextRange的抽象类。它提供基于TextUnit移动起始和终止端点的能力。●TextTreeChangedEventArgs-TextChangedEventArgs定义在TextArray改变时发送的事件参数。●TextTreeDumper-TreeDumper是树检验类,由于打包问题它是一个公共类。●TextTreeNavigator-这是表示TextTree中特定的可移动位置的对象。它是TextNavigator的具体实现,并只用在TextTree中。●TextTreePosition-这是表示TextTree中特定的不可变的位置的对象。它是TextNavigator的具体实现,并只用在TextTree中。●TextTreeRange-对TextTree提供TextRange工具。它是用可移动端点的可改变的、连续TextRane。●TextTreeRangeContentEnumerator-直接在TextTreeRange下面的直接子对象的枚举器。●TextUnit-文本导航的可扩展单位。●TextUnits-对TextPosition和TextRange通常使用的文本单位。●Typography-提供对OpenType字体属性的丰富集合的访问。●UIElementParagraphResult-完全由UIElement构成的段落的ParagraphResult。用于浮动的对象、图形和嵌入的块级别UIElement。●Underline-实现从InlineElement导出的Underline元素。下面的列表包含和System.Windows.Documents名字空间关联的例子接口。●IDocumentContentHost-在内容宿主机上实现此接口以使得该宿主机的子对象可以在内容改变时通知该宿主机。●IDocumentFormatter-在元素上实现此接口以提供对如分页这样的文档特性的支持。●ITextDocumentResult-实现此接口来保持文档的列信息。●ITextParagraphResult-实现此接口以提供文本和对文本段落的定位信息。下面的列表包含和System.Windows.Documents名字空间关联的例子枚举。●ElementEdge-这标识TextPosition被定位的对象的边缘。●FindAdvancedOptions-由FindAlgorithm(搜索初始化)和TextRangeMovable/TextSelection(简化的搜索执行)类使用的高级搜索选项。●FindOptions-由TextBox.Find方法使用的简化搜索选项。●LogicalDirection-LogicalDirection定义在文本中移动的逻辑方向。它也用于确定在TextPosition插入内容时将TextPosition移至何处。●TextArrayRunType-识别TextPosition所处的范围,并考虑LogicalDirection。●TextChangeOptions-对CanChangeText的可能的文本改变。●TextMoveOptions-这通过指定终止导航的条件控制TextNavigator的移动。下面的列表包含和System.Windows.Documents名字空间关联的例子代理。●ObjectCloneDelegate-在复制或移动TextArray的一部分时提供DependencyObject的克隆或拷贝的回调用方法。●TextChangedEventHandler-在每次增加内容到TextTree或从TextTree移除内容时用TextChangedEventArgs调用TextChangedEventHandler代理。形状(shape)名字空间形状名字空间314是用于创建图像和对象的矢量图形元素的集合。使用矢量图形元素允许简单地重新设置元素的大小以适合特殊接口或显示设备的要求。例子元素包括画椭圆的“Ellipse”元素、在两点之间画直线的“Line”元素、画矩形的“Rectangle”元素,以及将多边形作为构成封闭形状的连接的直线序列画出的“Polygon”元素。下面的列表包含由System.Windows.Shapes名字空间展现的例子类。●Ellipse-画椭圆。●Glyphs-表示如“XAML”这样的标记语言中的字形。Glyphs用于表示字体。●Line-画两点之间的直线。●Path-画一系列的相连直线和曲线。●Polygon-画多边形(构成封闭形状的连接的直线序列)。●Polyline-画一系列的连接直线。●Rectangle-画矩形。●Shape-对形状元素(如椭圆、多边形和矩形)提供基础功能的抽象类。数据名字空间数据名字空间316包括用于绑定属性元素到数据源、数据源类及数据集合与视图的数据特定的实现的类和接口。这些类和接口也用于处理数据条目中的例外并允许基于各种数据源中的信息在运行时创建用户接口。可以用文本形式显示数据或用数据来改变显示的格式,例如,若美元数量为负数则以红色显示。例子类包括“Bind”类,它表示管理动态属性用户接口和源数据之间的绑定的绑定说明对象,及“XmlDataSource”类,它充当用于绑定到XML内容节点的数据的数据源。面向对象的应用通常用定义一段数据的值以及可以对该数据执行的操作的类来表示数据。术语“数据项”指一个这样的对象。应用软件可以处理单独的数据项或数据项的集合。它们可以用三种方式使用数据项(a)将来自外部数据源(如文件系统、远程服务器、数据库等等)的数据转换为对应的存储器内的数据项,并将修改后的数据项转换回到这些数据源所期望的形式;(b)使用数据为中心及应用为中心的逻辑的组合操作数据项;(c)通过用户接口向用户呈现由数据项实现的数据。数据名字空间316对这些任务中的第一个和第三个提供支持。第一个任务,获取来自外部数据源的数据,由“数据源”对象支持。数据源对象通常被定义为页范围或应用范围的资源,并充当数据的信关。数据源实现IDataSource接口,此接口定义在数据名字空间中的类获取对数据的访问的标准机制。特殊的数据源对象实现通过使用适合于特殊源的机制检索实际数据的逻辑。在一个实施例中,数据名字空间包括四个数据源类1.XmlDataSource,用于检索表示为XML的数据。2.SqlDataSource,用于从SQL数据,如MicrosoftSQLServer,库检索数据。3.WinFSDataSource,用于从WinFS服务检索数据。4.ObjectDataSource,用于从应用软件定义的任意对象检索数据。应用软件也可以定义裁剪成专用目标源的它们自己的数据源类。数据源类负责从外部源检索数据并将它转换为适合于由绑定类使用的一个或多个数据项。如果需要数据项的集合,则应用软件可以使用任何来自.Net框架的标准集合类,如Array、ArrayList、Hashtable等等、任何来自System.Data名字空间的数据为中心的集合类,如Dataset,或来自数据名字空间数据为中心的集合类,如ArrayListDataCollection。后面的这些类支持改变通知,即,当应用软件通过增加项、移除项、对集合排序等等改变集合时,集合发送通知。绑定类侦听这些通知并自动地更新用户接口来反映此改变。一旦数据已被转换为存储器内的数据项,应用软件就可以使用这些项执行计算并可以修改这些项将其作为计算的结果。使用数据为中心的操作(由数据项类定义)和应用为中心的操作(由应用软件自身定义)的组合来执行这些动作。这些动作可以由应用软件自动触发,或响应用户的动作触发。来自数据名字空间的特殊支持或合作不是必须的,从而在应用内提供逻辑和表示的清楚的划分。第三个有关数据的任务,通过用户接口呈现数据,由数据名字空间的“绑定”类支持。这些类使得应用软件能够描述数据项属性(源)和用户接口属性(目标)之间的对应关系(绑定)。术语数据绑定(或简单地,绑定)指建立这样的对应关系。例如,应用软件可以选择将Textbox控件的Text属性和数据项的CustomerName属性进行数据绑定。这样之后,控件将自动显示客户的名字,在应用改变数据项的时候更新显示,并在用户输入新名字到控件中时更新数据项。使用Bind类来描述这类对应关系,并使用Binding类来实现这类对应。任何数量的UI属性可以共享同一描述(Bind),但是每个属性有它自身唯一的Binding,Binding包含该特殊实例的状态。该描述包括下面有关所需对应关系的信息●Path-用作绑定的源的数据项属性的名称。这可以是简单的属性名称,或包括子对象和下标(如,当源属性有复杂类型的值时)的更加复杂的表达式,如“ShippingAddress.Line[2]”。当数据源为XML时,路径为XPath表达式。●BindType-对应关系是否为单向、双向或一次性的。在单向绑定中,对数据项的改变导致对用户接口属性的更新;数据率单向流动-从源到目标。在双向绑定中,数据双向流动;除了单向行为以外,对用户接口属性的改变导致对数据项属性的更新。在一次性绑定中,数据项属性被用来初始化用户接口属性,但是改变将不在任何方向上扩散。●Source-在何处获取源数据项的描述。这可以来自数据源对象、来自某些其他用户接口元素,或来自目标元素的DataContext属性的值。●UpdateType-在双向绑定中何时更新源属性Immediate、OnLostFocus或Explicit之一。Immediate更新在用户接口属性一改变时立即发生。OnLostFocus更新被延迟到目标元素失去键盘焦点的时候—这适合于TextBox控件,以避免在每次按键之后就更新的开销。Explicit更新在应用软件明确调用它们时发生。●Transformer-实现IDataTransformer接口的对象。这向应用软件给出在用户接口中使用之前修改数据项值的方法。修改可以是简单的型转换(如,在Background属性到BalancedOwed数据属性的绑定中,应用软件可以转换负的余额为红色背景而正的余额为绿色背景),或特定于应用的转换(如,在Text属性到NetWorth数据属性的绑定中,如果NetWorth超过一百万美元则应用可以显示“富有”,如果NetWorth在十万美元到一百万美元之间则显示“中产阶级”,而如果NetWorth小于十万美元则显示“贫穷”。Transformer是有助于根据数据分离表示的简单但强大的工具。除了一次性绑定之外的所有绑定都依赖于在数据属性改变时得到通知,从而可以对用户接口做出相应的改变。绑定类将IPropertyChange接口(来自System.ComponentModel名字空间)作为一种实现所需通知的方法。下面的表列出了由System.Windows.Data名字空间展现的成员。媒体名字空间媒体名字空间318提供各种媒体类。应用软件开发者及组件开发者可以使用这些类来开发各种表示功能。媒体名字空间318中的例子类包括支持特定图像效果(如,模糊和灰度)的“ImageEffect”类和提供使用单色、渐变色、图像、视频等等填充区域的机制的“Brush”类。媒体名字空间318包括子名字空间System.Windows.Media.Animation,该子名字空间包括允许开发者用动画呈现属性并协调带一组时间线的动画集合。动画是在一段时间上改变值的对象。动画效果包括在显示上移动一对象,及改变一对象的大小、形状或颜色。提供多个动画类以实现各种动画效果。效果可以通过关联动画和元素的属性值来实现。例如,为了创建淡入和淡出视图的矩形,一个或多个动画和矩形的透明度属性关联。媒体名字空间318也包括提供各种文本服务的子名字空间System.Windows.Media.TextFormatting。例如,“TextFormatter”文本引擎提供划分文本行并格式化在显示上呈现的文本的服务。“TextFormatter”能够处理不同的文本字符格式和段落样式,且能够处理国际化文本布局。下面的表列出由System.Windows.Media名字空间展现的例子成员。下面的表列出由System.Windows.Media.Animation名字空间展现的例子成员。下面的表列出由System.Windows.Media.TextFormatting名字空间展现的例子成员。媒体集成层媒体集成层(MIL)为开发者或程序员提供API使得可以在他们的应用中以直接的方式实现可能的复杂合成效果,而以不对正常的应用性能产生负面影响方式充分利用图形处理单元。MIL的一个方面提供组合不同媒体类型(如,2D、3D、视频、音频、文本、图像等等)并流畅无缝地一起用动画呈现它们的能力。MIL提供图形架构,用于多阶段合成及允许在编程和脚本接口进行功能类比的编程模型。API和脚本允许创建保留的结构或在呈现时合成的场景描述,还包括具有更立即方式本质的区域。通过接口,MIL提供对存储可视信息的数据结构的访问,从而应用软件可以利用由计算机硬件提供的图像能力。接口基于元素对象模型和矢量图形标记语言,用于以允许程序代码开发者稳定地连接场景图形数据结构来产生图形的方式来使用该元素对象模型。也可以使用此数据结构进行直接呈现或“编译”可视信息,从而可以给低层的图形系统提供快速的合成和动画。矢量图形元素对象模型总的来说对应于形状元素和其他元素,包括和场景图形的场景图形对象模型相关的图像及视频元素。标记可以解析为数据,包括元素树中的元素,元素又可以转换为场景图形数据结构中的对象。其他标记可以直接转换为数据及创建场景图形对象的调用。标记语言提供独特的方式来描述元素,包括简单的字符串格式或复杂的属性语法,属性可被重命名,使能在标记中的其他地方进行重用。MIL的一个方面是跨API集合集成动画和定时,将动画提供作为内在的基础级别概念。为了帮助流畅的动画,MIL提供(如操作系统的)多层图处理系统和方法。一个那样的图形处理系统包含两个组件,这包括按命令运作或慢速运作的高层组件,及快速处理(如,以图形硬件帧刷新速率)的低层组件。总的来说,为了向低层组件传递简化的数据结构,高层、频率较低的组件执行计算量大的更新动画参数和穿过场景数据结构的方面。为了处理数据结构而生成恒定的图形子系统输出数据,低层组件以较高的频率,如图形子系统的帧刷新率工作。低层处理包括在需要获取实时值以呈现动画的每一帧的场景时,对任何参数时间间隔进行内值计算。顶层MIL对象包括可视组件树,它是包含将画出的主要内容的对象。控件将直接从此树的可视组件导出。可视组件独立于设备和父组件上下文。呈现目标是画可视组件的设备。此对象,(如,屏幕)可以有它自身的缺陷或不足的机制。各种呈现目标包括屏幕上的窗口、打印机、元文件、表面及“子窗口”,子窗口为独立于剩下的场景画出的部分场景。其他和画图组件相关的对象包括可视组件呈现器,它包括配置为将可视组件树画到呈现目标上的对象,及知道何时将可视组件树画到呈现目标上的显示调度器对象。时间管理器是一组定时节点的上下文对象,而且是调度器调用运作的对象。提供可视API,这本质上是通过媒体集成层画图组件的起始点,并包括多种类型的对象,包括VisualManager对象,它将VisualTree连接到媒体。不同类型的VisualManager(如,Screen、Printer和Surface)负责呈现VisualTree到它们特定的媒体。可视组件是其中程序员画图的地方;它是可视组件树中的节点并为程序提供画图的地方。DrawingContextAPI提供基于上下文的编程模型,编程模型用于确定如何构建放置Visual的可视内容或将其呈现到ImageData。提供DrawingContext类,及获取DrawingContext并枚举RetainedVisual/DrawingVisual中的可视内容所需的类和切入点。为了支持可变性,提供了从Changeable基类导出的一组类型。任何需要可变性的类型都可以从Changeable类导出。例如,在图形编程中,对象模型包括Brush、Pen、Geometry、FloatAnimation、GradientStop、Segment等等。IsChangeable属性根据它的定义一个状态的当前值规定是否可以修改可变的对象。画笔是表示填充平面的方法的对象。除了能够以绝对的方式填充平面以外,媒体集成层的画笔也可以确定它们如何相对于它们所填充的对象的大小填充平面。画笔类型的例子包括SolidColorBrush、VisualBrush(它可以引用矢量图形资源/Visual)、DrawingBrush、LinearGradient、RadialGradient、ImageBrush和NineGridBrush。某些的画笔对象可以在使用它们时知道它们和坐标系统的相对关系,也可以知道它们和它们所用的几何图形边框的相对关系。这个大小基于画笔所填充的对象。Brush基类有转换、通用不透明度和混合模式。画笔(及矢量图形和MILAPI中的其他对象资源)对象是Changeable且在它们被创建之后可以对它们进行写入,并遵从通用的Changeable模式以确定它们在以正常方式使用以后的行为。Geometry类的对象可以用于剪裁、点击测试及用Pen和Brush呈现基于矢量的2D数据。导出的Geometry类提供更加具体的构建和枚举语义。提供一些特定于形状的Geometry类型,以及允许明确定义有更加复杂的形状的Geometry的广义PathGeometry。Geometry是抽象基类。GeometryCollection是在它们定义的区域上使用特殊的CombineMode操作组合的多个Geometry对象的集合。此对象允许Geometry对象可视组件组合的创建比在PathGeometry内严格的使用PathFigure对象更加简单。ImageSource是抽象类,包括用于图像处理的基本构建单元。ImageSource概念上表示在特定大小和分辨率下单个恒定的象素集合。例如,ImageSource可以是Decoder可以提供的图形文件中的单个帧,或可以是对特定的ImageSource自身进行操作的转换结果。ImageSource是可变的,不仅因为它自身的属性可以改变,也因为它的子类的属性也可能改变。提供Transform类的对象用于缩放、旋转、平移和扭曲矢量和栅格图形。导出的Transform类提供友好的用法和枚举语义。Effects提供以呈现为中心的方式更改场景的可视内容的方法。例如,VisualEffects(基于栅格的位图效果)操作基于图像的、完全合成的部分场景的表示。Effects划分为各种类型,包括VisualEffects、BlendModes和VectorEffects。通过对子图形或元素应用VisualEffects,它可以用在保留模式场景中,或它可以用在单独的图像管线中。BlendModes是基于图像的效果的具体形式,且能够以和VisualEffects大致相同的方式将其应用于保留模式的场景。当源是合成的,如相乘或相加时,Blend模式执行源和目标颜色的合并。点击测试被用于挑选场景中的可视组件,并通过从控件树的顶部开始,并通过由一个点或几何形状返回一个控件或一组控件来进行操作。控件可以用支持服务确定它是否被点击,支持服务包括呈现的几何图形、边框、范围外的几何图形(点击区域)、图像不透明度或遮蔽,及其自身的逻辑。在点击到时,控件可以返回特定的有关点击的数据。点击测试机制可以用有效的方式过滤点击测试结果。点击测试途径是可视组件树中从右到左的很深的途径,通过以z顺序,从上到下的方式进行回调来报告点击。当向下降时,点击测试器借助元素层次关系查看过滤,例如,有形状的画布,或有内部画布的泊放面板。当发生点击时,点击测试器可以进一步继续处理点击(如果有的话),或停止。提供动画系统,它包括定时控件引擎和一组动画对象。定时引擎是可由具有随时间而变化行为的任何对象,如动画和音频或视频媒体对象使用的服务。动画对象实现将时间段跨度映射到其他数据类型然后将其用作其他高层对象的输入的一组功能。通过关联动画集合与呈现操作来实现图形动画。在呈现操作中使用的每个动画可以按称为“时间线”的独立时钟来运行。一旦画出了动画原型且指定了动画参数,低层呈现系统以固定的时间间隔处理场景的重画。每次呈现帧时,就基于经过的时间(在多数情况下由系统时钟来测量)对包括在场景中的动画的当前值进行计算,然后重画该动画原型。也通过MIL提供各种原语类型、颜色特性和媒体支持。MediaData可以用来播放任何音频/视频内容。设计名字空间设计名字空间320提供支持表单和文本编辑、格式化数据及跨进程数据共享的类。这些类提供用于编辑文档、应用和其他内容的可扩展框架。设计名字空间320包含两个层次上的功能面向需要预打包的对不同类型的信息的即刻可用的编辑器的应用开发者的高层功能;及面向引入它自身类型的数据的更加高级的应用的低层功能。作为示例的预打包的即刻可用的编辑器提供纯文本编辑、丰富格式文本编辑、表单(元素布局)编辑和密码输入。设计名字空间320提供灵活且可扩展的方法来组织各种功能。设计名字空间320提供服务、行为和抽象的组合来允许开发者构建专门且易于客户化的信息编辑解决方案,而不是提供普通的固定特性的编辑器。设计名字空间320包括几个可定制的编辑特性,包括范围服务、可堆放行为、编辑器—设计器模式、用于元素编辑的抽象设计器、抽象文本对象模型、修饰层、设计表面、通用数据传输协议,及可扩展的撤消机制。有范围的服务允许将特定服务和应用数据的特定部分和子部分关联。此机制也允许在不同的范围内打开或关闭服务。提供服务支持的主要类是ServiceManager;使用IService和IScopeService接口来实现单独服务。“可堆放行为”的概念允许在适当的时间段激活不同的行为。在一个实施例中,嵌套基于时间的行为激活,使得在更一般的进程暂时挂起并随后恢复的同时可以开始和结束子进程。可堆放行为的方法通过允许集成预先对彼此不了解的进程解决了这个问题,而不采用硬编码解决方案。提供对此机制的支持的主要的类是EditRouter;单独行为是Eidtor和EditBehavior类的子类。可编辑数据的内置类型由EditBehavior的对应子类支持,如TextEditor、ElementEditor和MoveBehavior。“编辑器—设计器模式”的概念允许分离通用的编辑功能和更加具体的可编辑信息的子类型。编辑器不期望操作特定的数据结构。相反,它假设使用通过某些抽象接口展现数据内容,隐藏实现细节,但是对于编辑交互的对应动作已经足够了。此模式对元素(在表单编辑中)和文本(在丰富格式文本编辑中)特别有用。“元素编辑的抽象设计器”是用于元素编辑(如,表单编辑)的领域的“编辑器—设计器模式”的应用。各种元素可以有不同的内部结构、外观和行为,但是如果它们展现某些用于移动、旋转或重设大小标准的“设计器”,则它们变得由元素编辑器可编辑。抽象文本模型是用于丰富格式文本编辑的“编辑器—设计器模式”的另一个应用。此抽象允许不同的后备存储来参与丰富格式文本编辑,如RTF、XHTML、纯文本、XAML标记、按语法进行强调的源代码等等。即使这些文本类型的语义本质和内部结构有所不同,通过经抽象文本模型展现自身,它们支持通用编辑机制的应用。另外,此方法支持文本和数据集成,从而来自不同后备存储的文本可以包含彼此的片段,同时提供无缝的编辑操作。修饰层是在编辑中提供丰富可视反馈的统一工具。修饰层对多种类型反馈提供统一的支持。强大的可视组件可以动态地与元素及数据的其他部分连接和分离来指出可能的作用于它们的用户活动。设计表面是预打包编辑资源(如修饰层和编辑路由器)的XAML控件。这简化了中间层次的编辑开发。如剪切/复制/粘贴和拖/放这样的编辑功能在集成的信息环境中是很重要的,但是可能由于不同数据类型的复杂性和不兼容而难以支持。通用数据传输协议通过提供用于数据抽取、数据插入、数据拖动和数据转换的抽象组合来处理此问题。这个通用的数据传输协议对应用数据集成提供强大和灵活的机制。可扩展的撤消机制通过收集各种类型的数据来管理撤消栈。撤消管理器包括处理具有不同数据类型的撤消操作的协议。下面的表列出由System.Windows.Design名字空间展现的例子成员。输入名字空间输入名字空间322包括协调由系统接收的输入的输入管理器。输入名字空间322也包括帮助管理不同的输入设备,如键盘或鼠标并对其提供控制的类。输入系统允许应用从如鼠标、键盘和触针(笔)这样的输入设备取得信息。多数输入功能以System.Windows名字空间中的UIElement、FrameworkElement、ContentElement和ContentFrameworkElement类的属性、方法和事件的形式存在。UIElement和ContentElement有类似的输入功能,这由IInputElement接口获取。类似地,FrameworkElement和ContentFrameworkElement分别从UIElement和ContentElement导出,它们共享很多输入API且两者都实现IFrameworkInputElement。输入系统提供对键盘、鼠标和触针的完整支持。键盘功能包括键按下/键弹起事件、焦点管理和通知、访问当前的键状态,和转换击键为输入字符串。鼠标功能包括鼠标位置、点击、移动、在元素边界件的进入/离开事件、鼠标捕捉、悬停和鼠标滚轮。触针功能包括位置和移动(笔接触表面和“在空中”均可)、轻按/点击、捕捉和姿势识别。输入名字空间包含上述功能所需的辅助器类,如枚举、事件参数、代理签名等等。另外,输入名字空间包括Keyboard、Mouse和Stylus类,它们提供有关那些设备的当前状态的信息。输入系统提供方法,指定在特殊元素上以及对整个应用的鼠标光标。输入系统和文本服务框架(TSF)集成,TSF允许其他输入软件理解输入新文本到其中的文本环境。这由输入方法编辑器(IME)使用,IME允许东亚语言的用户转换多个击键为单个字符-IME软件和TSF通讯以基于上下文识别击键的最佳翻译并使用TSF来插入文本到文档中。类似地,语音识别使用TSF来挑选最佳识别并将其插入文档。输入系统以TextInput事件的形式提供与TSF的自动集成。输入名字空间也提供API用于描述文本环境,及控制从原始键盘输入到文本输入的转换。InputManager类提供过滤器和监控器,它们允许第三方观察输入流并在触发初始输入事件之前创建新的输入事件。InputManager也使用IInputProvider和InputReport提供用于被插入输入系统的新设备的API。下面的表列出由System.Windows.Input名字空间展现的例子成员。导航名字空间导航名字空间324提供允许构建有浏览方案的应用,如浏览器应用的一组类和服务。这些类和服务允许开发带有客户化的导航操作的应用。例如,当从网上商家购买产品或服务时,点击“返回”按钮使得应用显示不同的页面,询问用户是否希望取消或改变他们的订单。在另一个例子中,激活“刷新”按钮使得应用软件检索新的数据而不是首先重新加载该应用软件接着再检索新数据。导航名字空间324也包括用于提供产生向用户提供的问题层次的机制的页函数。下面的表列出由System.Windows.Navigation名字空间展现的例子成员。自动化名字空间自动化名字空间326包含用于支持可访问性及用户接口自动化的成员。可访问性系统包括客户端和提供者端。工具的系统包括客户端自动化工具,客户端自动化工具包含用于搜索用户接口信息的客户自动化类。客户自动化类包括事件注册工具和逻辑元素发现工具。这组工具进一步包括用于向客户提供用户接口信息的提供者端自动化工具。提供者端自动化工具包括用于向客户提供事件信息的工具的自动化提供者类。客户自动化类提供用于一个或多个客户的UI自动化方法。客户自动化类包含不特定于任何UI元素的方法。客户自动化类可以提供从点、窗口句柄或桌面根元素获取逻辑或原始元素的方法。客户自动化类还可以提供基于输入准则的查找逻辑元素的方法。客户自动化类最好还包括注册和注销事件通知的方法。自动化类最好还提供用于加载代理DLL、检索本地化的属性名称和控件模式并执行元素比较的辅助函数。客户自动化类也包括由客户用来侦听事件的方法。下面的表列出由System.Windows.Automation名字空间展现的例子成员。下面的表列出由System.Windows.Automation.InteropProvider名字空间展现的例子成员。序列化名字空间序列化名字空间328提供从XML文件或二进制表示的文件中加载对象(如元素)的层次结构或将对象的层次结构保存到其中的解析器。此处理也设置和对象相关的属性并关联诸事件处理程序。进一步来说,序列化名字空间328提供序列化和反序列化对象的功能。序列化是采用对象的活动的存储器中的表示,并产生适合于保存到存储设备(如硬盘)或通过网络发送的数据流。反序列化是反向的处理即,取得数据流并从该数据流产生对象。反序列化亦称为“解析”,且实现解析的代码被称为解析器。序列化和反序列化两者都支持多种流格式,如称为XAML的XML格式或称为BAML的二进制格式。当解析器和标记编译器一起使用时,它可以产生“CAML”,其中输出是产生序列化对象的代码。序列化和反序列化支持全面的XAML特性,包括标准语法、复合属性、紧凑的复合语法、隐含的子元素语法、显式的子元素语法、有明确集合标签的集合语法,及有隐含集合标签的集合语法。序列化和反序列化两者都是完全可扩展的。类可以通过下面几种机制定义它们希望如何序列化和反序列化,如●缺省地,类名称作为标记标签名称处理,而属性和事件作为同一名称的标记属性处理。●类定义类型转换器(从System.ComponentModel.TypeConverter导出的辅助对象)以便序列化和反序列化标记属性值。●类可以通过实现IAddChild接口(解析)和使用CLR属性支持隐含的子类以描述如何序列化隐含的子类。●类可以通过使用DesignerSerializationVisibility控制是否可以序列化/反序列化属性,并通过使用DefaultValueAttribute和ShouldPersist方法控制是否需要序列化特殊对象上的属性。●或者,组件可以使用字面内容序列化/反序列化其自身,在此情况组件的序列化形式不必符合XAML的规则(组件必须为格式良好的XML)。虽然上述例子使用了单词“标记”,同样的概念可以应用于二进制格式(BAML)。第二个可扩展的机制是“设计器挂钩”,它允许插入另一段代码到序列化器和反序列化器中,并在解析和序列化过程中插入和截取属性。此机制允许创建新的标记特性,并允许现有语法的客户处理。标记编译器使用设计者挂钩来产生CAML。序列化和反序列化支持各种对象(如,任何从System.Object导出的类)。从System.Windows.DependencyObject导出的类可以定义依存关系属性,它们得到两个额外特性●序列化可以自动地分辨是否需要序列化属性(对DefaultValueAttribute/ShouldPersist不需要)。●解析器可以执行特定的优化以更快地加载。序列化和反序列化支持XML名字空间和映射XML名字空间到CLR名字空间的定义文件。Mapper类允许定义任意的从XML名字空间和标签名字到CLR类的映射。下面的表列出由System.Windows.Serialization名字空间展现的例子成员。互操作名字空间互操作名字空间330提供一组支持和其他操作系统或计算平台进行互操作的类。下面的表列出由System.Windows.Interop名字空间展现的例子成员。Forms.Interop名字空间Forms.Interop名字空间332提供允许应用寄宿表单控件操作的元素。System.IO.CompoundFile名字空间另一个名字空间,System.IO.CompoundFile(未在图3中示出)提供利用在其中存储各种文档可分发文件的复合文件的服务。这些服务用于内容的加密和压缩。这些服务也支持存储同一内容的多种表示,如可重设流的文档和固定格式的文档。下面的表列出由System.IO.CompoundFile名字空间展现的例子成员。System.Windows.Automation名字空间System.Windows.Automation包含用于支持可访问性及用户接口自动化的成员。可访问性系统包括客户端和提供者端。工具的系统包括客户端自动化工具,客户端自动化工具包含用于搜索用户接口信息的客户自动化类。客户自动化类包括事件注册工具和逻辑元素发现工具。这组工具进一步包括用于向客户提供用户接口信息的提供者端自动化工具。提供者端自动化工具包括包含用于向客户提供事件信息的工具的自动化提供者类。客户自动化类提供用于一个或多个客户的UI自动化方法。客户自动化类包含不特定于任何UI元素的方法。客户自动化类可以提供从点、窗口句柄或桌面根元素获取逻辑或原始元素的方法。客户自动化类还可以提供基于输入准则查找逻辑元素的方法。客户自动化类最好还包括注册和注销事件通知的方法。自动化类最好还包括用于加载代理DLL、检索本地化的属性名称和控件模式并执行元素比较的辅助函数。客户自动化类也包括由客户用来监听事件的方法。下面的表列出由System.Windows.Automation名字空间展现的例子成员。System.Windows.Ink名字空间System.Windows.Ink名字空间提供支持电子墨水处理系统的类。电子墨水处理技术对各种软件应用都很有用。这些电子墨水处理技术特别适合用于分析电子墨水,包括布局分析、分类和识别电子墨水。某些电子墨水处理技术允许电子墨水处理和实现这些技术的软件应用的操作异步,从而能够以不中断或不明显延迟软件应用操作的方式来处理电子墨水。软件应用甚至可以在正在处理前面的电子墨水输入时继续接受新的电子墨水输入。应用编程接口实例化墨水分析器对象,墨水分析器对象从来自寄宿该文档并允许在第一个处理线程上的软件应用接收用于包含电子墨水内容的文档的文档数据。然后墨水分析器对象使用第一个线程做出文档数据的拷贝,向电子墨水分析处理提供文档数据的拷贝,然后将第一个处理线程的控制返回到分析处理。在分析处理分析了电子墨水之后,墨水分析器对象协调分析处理的结果和该文档的当前文档数据。在特殊的实施例中,可以基于它们相对于彼此的的空间位置对文件或文档中的元素进行描述。例如,可以用同样的空间坐标系统描述电子墨水笔触和键入的文本两者。使用空间信息来描述文档的元素,管理文档的软件应用可以维护描述其文档元素之间关系的数据结构。特别是,软件应用可以维护描述各种文档元素的类并定义各种文档元素之间的关联的数据接口。例如,这些关联可以定义为用于链接电子墨水笔触数据或它们的集合与电子文档中的其他元素(如单词、行、段落、图形、表格单元等等)的信息。通过基于它们的空间位置来描述文件或文档数据结构中的文档元素,各种文件类型的文档元素可以使用通用技术来识别和处理它们的文档元素。更特别地,各种软件应用可以基于它们的空间位置描述文档内的文档元素,并通过使用通用电子墨水分析方法来使用此空间位置。进一步来说,通过指定文档中用于分析的特殊区域,每个软件应用可以限制分析处理为仅处理文档内所需的元素。为了分析输入到文档中的新电子墨水,管理文档的软件应用修改和文档关联的数据结构以包括将分析的新墨水。然后软件应用向墨水分析工具提供此数据结构(或其相关部分),墨水分析工具复制此数据结构的部分或全部用于分析(并操作数据的这个拷贝,而此数据独立于应用程序的文档数据结构)。墨水分析工具将该拷贝传送到分析处理,如解析处理(如,布局分析处理和/或分类处理)。软件应用可以在正在执行墨水分析处理时继续其正常操作,包括接收新的电子墨水输入和/或其他数据。除了接收新的电子墨水,应用程序可以接收任何“其他数据”,例如,修改现有墨水、文本、图像、图形、表、流程图、图表等等的大小、位置或内容的数据;增加附加文本、图像、图像、表、流程图、图表等等的数据;删除现有文本、图像、图形、表、流程图、图表等等的数据。在所有需要的分析处理完成后,将分析结构返回到墨水分析工具。墨水分析工具执行各种功能来帮助电子墨水的处理。墨水分析工具可以作为编程接口(如API)来实现。进一步来说,墨水分析工具可以作为一组软件对象例程和相关信息来实现,它们可以由软件应用根据需要进行调用以分析文档中的墨水。在一个实施例中,实现墨水分析工具的API(此后称为墨水分析API)可以包含两个核心类。第一个类被称作“分析上下文”类,而第二个类为“墨水分析器”类。“分析上下文”类的组件用于创建分析上下文对象。“墨水分析器”类的组件用于创建和使用对分析处理提供文档独立的分析上下文对象的对象、确定何时产生分析结果,并协调分析结果与文档的当前状态。分析上下文类由宿主应用实现以创建分析上下文对象,它作为软件应用的内部文档树的代理视图来使用。分析上下文对象包含所有未分析的墨水数据,且分析上下文对象用于识别应分析哪些未分析的墨水数据。分析上下文对象也包含有关原先分析好的墨水的信息。原先分析好的墨水可以用于确定如何分析当前正在分析的墨水,且可以在分析未分析的墨水过程中对它自身进行修改。进一步来说,分析内容对象包含有关文档非墨水内容的信息,它用于正确地将墨水分类为非墨水内容的注释。分析上下文类包括当由软件应用调用时创建分析上下文对象的构造函数。这个类也包括用于分析上下文对象的各种属性,包括称为“DirtyRegion{get;}”的属性。DirtyRegion属性定义文档中包含未分析的墨水数据的部分(从而包括分析上下文对象的部分)。分析上下文类也可以包括称为“Rootnode{get;}”的属性,它标识分析上下文对象中的最顶层或根上下文节点。这个根上下文节点,如子上下文节点一样,包括给定分析上下文对象的所有其他上下文节点对象。在特殊的实施例中,根上下文节点应属于上下文节点类型“Root”。在应用实现其自身的分析上下文对象的实施例中,分析上下文对象可以有其他上下文节点作为根上下文节点的兄弟节点,但墨水分析器类的组件只限于考虑由根上下文节点包含的上下文节点。分析上下文类可以附加地包括属性“AnalysisHints{get;}”,它返回由软件应用设置的分析提示对象数组。如下面更详细的说明,分析提示对象可以包含辅助分析处理的任何类型的信息。此信息可以包括,例如,仿真陈述、指南或单词列表。它也可以包括设置用于分析的语言的信息、将未分析的墨水作为完全的手写文本、完全的图画或对解析处理提供任何类型的指导来识别(如将墨水作为列表、表、形状、流程图、连接器、容器等等识别)的信息。除了这些属性,分析上下文类也可以包括可以由例如软件应用调用从而让分析上下文对象执行任务的各种方法。例如,分析上下文类可以包括称为“FindNode(Guidid)”的方法。分析上下文对象中的每个节点都有全局唯一标识符(或GUID),且此方法将在分析上下文对象中的任何地方定位调用中指定的节点。如分析上下文类那样,墨水分析器类也定义允许软件应用创建该类的实例(即,墨水分析器对象)的公共构造函数,和各种属性。例如,它可以包含称为“UserInterfaceContext{get;set;}”的属性,它定义向其返回分析处理结果的处理线程。此属性允许将结果同步到另一个对象。例如,如果这设置为主表单,那么解析器结果将在应用主线程发出。它也可以包含属性“AnalysisOptionsAnalysisOptions{get;set;}”,此属性指定可以用于分析处理的各种准则。这些准则可以包括,例如,支持文本识别、支持表的使用、支持列表的使用、支持注释的使用和支持连接器和容器的使用。墨水分析器类将包括各种方法。例如,这个类可以包含称为“AnanysisRegionAnalyze()”的方法。此方法启动一个同步分析处理。传入文档元素数据到这个方法,它描述文档的当前状态并指示需要分析文档中的什么墨水。对某些实施例,如上所述,文档元素对象可以作为分析上下文对象提供(即,AnalysisRegionAnalyze(AnalysisContext))。另外,可以将单个墨水笔触传递给分析处理,或者使用对笔触的引用(如AnalysisRegionAnalyze(Strokes))或作为墨水分析器对象的属性引用(如,InkAnalyzer.Strokes{get;set})而没有属性传递给Analyze方法。一旦分析处理完成,此方法将返回对已被修改为包含分析处理结果的独立于文档的分析上下文对象的引用。此方法也返回描述文档中计算出结果的区域的AnalysisRegion值。墨水分析器类也可以包括称为“AnalysisRegionAnalyze(AnalysisContext,waitRegion)”的方法。此方法和上述的同步分析区域Analyze()方法相同,但是它只在在需要指定的waitRegion区域中的结果时对墨水进行分析。更特别地,对此方法的调用将标识文档的分析上下文对象和分析上下文对象的区域(称为“waitRegion”),分析处理应对此区域进行同步分析。在特定实施例中,将忽略分析上下文对象的所有其他区域,除非分析处理需要分析那些区域中的内容来完成它对waitRegion的分析。如上所述,用此方法传递的分析上下文对象包括称为“DirtyRegion”的属性,它描述文档中需要分析的区域。通过指定具体的waitRegion,软件应用可以更加快速地获取所关注的一个特定区域的分析结果,而不是分析文档中的所有墨水数据。当调用这些Analyze方法中的任何一个时,将执行每个可用的分析处理。同时,由于这些Analyze方法是同步调用,不需要在它们结束时执行协调处理,也不需要在它们结束时触发事件。墨水分析器类也可以包括称为“BackgroundAnalyze(AnalysisContext)”的方法。此方法启动指定的分析操作,但在独立的背景分析线程进行处理。因此,此方法将几乎立刻就返回控制到主处理线程,而实际的分析操作在背景完成。特别地,如果成功启动分析处理,此方法将返回“真”值。再次,传入该方法的AnalysisContext值标识文档的分析上下文对象并指示需要分析文档中的什么墨水。一旦分析操作已在背景线程上完成,则触发Result事件以允许软件应用访问这些结果。此事件包含结果和协调方法用于将结果返回包括在返回结果时文档的当前状态的分析上下文对象中。这三个Analyze方法中的每一个都按顺序调用“AnalysisRegion”类中的方法“Clone”。使用“Clone”方法,这些Analyze方法创建独立的文档分析上下文对象,接下来此上下文对象由分析处理修改以展示分析结果。墨水分析器类也可以包括称为“Reconcile(AnalysisContextcurrent,AnalysisResultsEventArgsresultArgs)”的方法,软件应用在接收到由调用BackgroundAnalyze(AnalysisContext)方法导致的结果事件之后对它进行调用。Reconcile方法比较包含在文档独立的分析上下文对象中的分析结果与由软件应用维护的分析上下文对象的当前版本。此方法标识需要增加和从分析上下文对象的当前版本中移除的节点,并标识现有节点的任何下面的属性是否已改变其识别结果、其位置、和该节点关联的墨水笔触,或和分析操作的结果关联的任何其他数据。此方法也将这些标识出的改变写入到分析上下文对象的当前版本中。此方法对上下文节点顺序敏感,如行上下文节点上的单词上下文节点的顺序。由于它们包含公共结果结构和私有结果结构,用此方法传回分析结果(即,AnalysisResultsEventArgs属性的值)。返回公共结构从而软件应用可以预览将发生在协调阶段的改变。包括私有结构以防止软件应用在协调处理之前改变任何分析结果。墨水分析器类也包括称为“RecognizersRecognizersPriority()”和“SetHighestPriorityRecognizer(recognier)”的方法。当需要识别墨水时,将基于语言和能力使用适当的识别器。相应地,RecognizersRecogonizersPriority()方法以墨水分析器对象评估它们的顺序返回识别处理。每个系统都取决于可用的识别处理来确定此顺序,但软件应用可以通过在墨水分析器对象上调用SetHighestPriorityRecognizer(recognizer)进行覆盖。墨水分析器将枚举这个有序列表直到可以找出适当的识别器。SetHighestPriorityRecognizer(recognizer)方法提高识别处理的优先级。通过提高特殊的识别处理的优先级,如果它匹配当前识别操作所需的语言和能力,则将使用该识别处理。本质上,SetHighestPriorityRecognizer(recognizer)将指定的识别处理压入到由RecognizersPriority方法返回的列表顶部。墨水分析器类也包含称为“AnalysisRegionAbort()”的方法,它可以将分析上下文对象用作参数。此方法允许前台或后台分析操作较早地终止。此方法返回描述在取消之前正在分析的区域的分析区域。因此,如果软件应用需要在晚些时候继续分析操作,可以将此区域合并到文档当前状态的分析上下文对象的DirtyRegion中。进一步来说,墨水分析器类可以包括称为“AnalysisResultsEventHandler”的事件,它根据需要的频率对墨水分析器对象触发。更特别地,可以在分析处理之间每隔五秒钟至少触发此事件一次。此事件可以用于向应用提供对正在进行的异步分析处理(或多个处理)的状态的更新。墨水分析API也可以包括除分析上下文类和墨水分析器类之外的类。例如,墨水分析API可以包括上下文节点类。此类也可以包括和构成分析上下文对象和文档独立的分析上下文对象的上下文节点相关的各种组件,如称为“ContextNodeTypeType{get;}”的属性。每个上下文节点都有类型,且有每个类应遵循的一组特定规则。这包括这样的规则,如允许什么类型的子上下文节点,以及笔触是否可以直接和上下文节点关联或只能通过其子上下文节点关联。上下文节点的可能类型可以在ContextNodeTypes枚举中定义,且可以包括,例如,下面的类型InkAnnotation节点,它表示墨水数据注释非文本数据的;InkDrawing节点,它表示构成图形的墨水数据;InkWord节点,它表示构成单词的墨水数据;Line节点,它表示一个或多个InkWord节点和/或用于构成一行文本的单词的TextWord节点;ListItem节点,它可以包含Paragraph、Image,或类似的在列表中期望的节点;及List节点,它包括每个都描述列表中的一个条目的一个或多个Listem节点。节点类型也可以包括NonInkDrawing节点,它表示非墨水图形图像;Object节点,它表示未由ContextNodeType枚举的其他值包括的数据;Paragraph节点,它包含一个或多个对应于构成段落的行的Line节点;Picture或Image节点,它们表示图像;Root节点,它充当分析上下文对象中的顶层节点;Table节点,它包含表示构成表的项目的节点;TextBox节点,它表示文本框;TextWord节点;及UnclassifiedInk节点,它对应于还未被分类的墨水数据。节点类型也可以包括用于其他节点分组的Group节点、用于着重表示项的InkBullet节点、用于出现在表的一行中文档元素的Row节点,以及用于出现在表的单元格中的文档元素的Cell节点。上下文节点也可以包括称为“GUIDId{get;}”的属性,它是当前上下文节点的全局唯一标识符。为了允许对任何所需上下文节点的访问,单个分析上下文对象内的每个上下文节点都应具有唯一标识符。此类也可以包括称为“AnalysisRegionLocation{get;}”的属性,它标识文档空间中实际上定位相关上下文节点的位置。AnalysisRegion是对一个或多个可能不相交的似矩形结构一起进行分组的二维结构。此类也可以包括称为“StrokeCollectionStrokes{gets;}”的属性,它表示和相关的上下文节点关联的墨水笔触。对特殊的实施例,墨水分析API只允许叶上下文节点(如Word、Drawing和Bullet节点)有笔触。软件应用可以使用此属性通过所有祖先上下文节点来引用叶节点级别的笔触(如,根节点可以包含对相关的分析上下文对象中的所有笔触的笔触引用)。进一步来说,这个类可以包括称为“ContextNodeParentNode{get;}”的属性,它标识包含相关上下文节点的父上下文节点。在特殊的实施例中,上下文节点总是依赖于父上下文节点创建,而Root上下文节点为分析上下文对象的静态成员。这个类也可以包括属性“ContextNode[]SubNodes{get;}”,它标识作为相关上下文子节点直接子节点的所有上下文节点。即,此属性仅标识分析上下文对象中向下一层的那些子上下文节点。例如,Paragraph上下文节点的这个属性值仅标识由该Paragraph节点包含的行上下文节点,而并不标识作为行上下文节点的子节点的单词上下文节点。这个类也可以包括称为“RecognitionResultRecogonitionResult{get;}”的属性,它提供由相关的识别分析处理或多个处理计算出的识别结果,因为RecognitionResult可以标识不止一种语言的不止一行文本。RecogonitionResut对文档独立的分析上下文对象中的每个上下文节点可用,虽然由识别分析处理设置并用于创建RecognitionResult对象的RecognitionData属性只可能在上下文节点树的一个层次上设置以避免复制数据。如果节点没有与其关联的RecogonitionData,它将或者合并其所有子节点的识别结果或从其父节点抽取识别结果。这个类也可以包括称为“StreamRecognitionData{get;set;}”的属性,它是RecognitionResult值的持续形式。再次,识别分析处理产生在相关上下文节点上设置的StreamRecogonitionData值。然后基于此值构建RecognitionResult对象。上下文节点类可以进一步包括称为“ContextLink[]Links{get;}”的属性,它提供ContextLink对象的数组。ContextLink对象描述两个上下文节点之间的其他关系。虽然上下文节点通常和其他上下文节点有父子关系,ContextLink支持上下文节点之间的其他关系。例如,ContextLink可以支持两个上下文节点之间的连接连接一个上下文节点到另一个上下文节点、由一个上下文节点包含另一个上下文节点,或由软件应用定义的所需类型的连接。可以通过调用AddLink方法将ContextLink增加到这个数组。类似地,可以通过调用DeleteLink方法从这个数组中移除ContextLink。进一步来说,这个类可以包括属性“IsContainer{get;}”和“IsInkLeaf{get;}”。如果相关上下文节点不是叶上下文节点(即,如果相关上下文节点包含子上下文节点并因此视为容器上下文节点)则IsContainer{get;}属性值为“真”,反之则为“否”。如果相关上下文节点是叶上下文节点则IsInkLeaf{get;}属性值为“真”,反之则为“否”。即,如果相关上下文节点不包含任何子上下文节点,则将其视为叶上下文节点。在特定实施例中,期望InkLeaf上下文节点包含对笔触数据的引用,而容器上下文节点没有此限制。容器上下文节点可以引用也可以不引用笔触数据,根据软件应用的指派而定。上下文节点类也可以包含属性“RectRotatedBoundingBox{get;set;}”。由布局和分类分析处理来计算这个属性的值。如果以某个角度写出和相关上下文节点关联的墨水数据,则上下文节点边界将仍然是水平对齐的。然而RotatedBoundingBox属性的值将与写出和相关上下文节点关联的墨水数据的角度对齐。进一步来说,这个类可以包括属性“ReClassifiable{get;}”,此属性通知墨水分析器是否允许它修改相关上下文节点的值。除了这些属性,上下文节点类也可以包含各种方法。例如,这个类可以包括称为“ContextNodeCreateSubNode(ContextNodeTypetype)”的方法。这个方法允许创建特殊类型的子上下文节点。在一个实施例中,这个方法只允许创建相关上下文节点的合法子节点类型,从而防止创建异常的数据结构。例如,这个方法只允许Line上下文节点创建InkWord和TextWord子上下文节点。这个类也可以包含称为“voidDeleteSubNote(ContextNodenode)”的方法,它从相关分析上下文对象中删除引用的子上下文节点。然而,在某些实施例中,如果所引用的上下文节点仍然包含笔触或子上下文节点,则此方法会失败。如果引用上下文节点不是相关上下文节点的直接子节点,则此方法也会失败。如果软件应用实现其自身的分析上下文对象并随后使用此方法,则它不删除不是相关上下文节点直接子节点的一个或多个非空上下文节点,以防止在分析上下文对象中出现异常的数据结构。另外,这个类也可以包括“ContextNode[]HitTestSubNodes(AnalysisRegionregion)”方法,它返回定位在指定区域中的上下文节点的数组。然而,只返回此元素的直接子节点,而不是所有的后代节点。此区域由AnalysisRegion对象定义,它可以是一个或多个矩形的集合。在特殊的实施例中,如果上下文节点任何部分的位置和指定区域相交,则将在该数据中返回此上下文节点。此方法用于,例如,创建文档独立的上下文分析对象并协调分析结构与对应于文档当前状态的分析上下文对象。因此,频繁调用此方法,并应该为由墨水分析器对象快速重复访问而优化它。上下文节点对象也可以包含称为“MoveStroke(Strokestroke,ContextNodedestination)”的方法。此方法将笔触关联从一个叶上下文节点移动到另一个叶上下文节点。在某些实施例中,此方法仅在叶上下文节点之间使用。它也可以包含称为“MoveSubNodeToPosition(intOldIndex,intNewIndex)”的方法,此方法将相关上下文节点相对于其兄弟上下文节点重新定位。例如,如果文档有三个单词在一行中,如单词1、单词2和单词3,那么它们的顺序隐含在从父上下文节点返回的子节点数组中。此方法允许改变它们的顺序,从而相对于相关父上下文节点来说,通过将单词1的上下文节点从位置1移动到位置3可以把单词1指定为行中的最后一个单词。进一步来说,这个类可以包含称为“AddLink(ContextLinklink)”的方法,此方法增加新的ContextLink对象到当前的上下文节点。在特殊的实施例中,ContextLink对象应包含对相关上下文节点的引用,以便将ContextLink成功增加到关联于相关上下文节点的ContextLink数组。它也包含称为“DeleteLink(ContextLinklink)”的方法。此方法从相关上下文节点的ContextLink数组删除或异常指定的ContextLink对象。在一个实施例中,此方法调用总是成功完成,即使ContextLink不存在于关联于相关上下文节点的ContextLink数组中。墨水分析API也可以包含分析提示类。如上述的很多类一样,分析提示类可以包括构造函数,称为“AnalysisHit()”,它初始化分析提示对象为空状态。这个类也可以包括多个属性,包括称为“AnalysisRegionLocation{get;}”的属性。此属性指定文档中应用AnalysisHint的位置(作为AnalysisRegion)。例如,如果文档是具有处于页眉的标题部分的自由格式笔记,那么应用可以对标题区域设置AnalysisHint来指定在该区域中期望水平的墨水行。AnalysisHint将有助于提高分析处理的准确度。此类也可以包含称为“stringFactoid{get;set;}”的属性,它指定特殊的“仿真陈述”,用于文档中应用AnalysisHint的位置。仿真陈述向识别处理提供对墨水数据的期望使用(如,作为正常文本、数字、邮政编码、文件名和WebURL)的提示。这个类也可以包括称为“RecognizerGuideGuide{get;set;}”和“OverrideLanguageId{get;set;}”的属性。RecognizerGuideGuide{get;set;}属性指定应用于文档中应用AnalysisHint的位置的写入指导。写入指导可以,例如,通过向用户指定并通知识别器分析处理用户将在何处写出行或字符来帮助提高识别器分析处理的准确度。OverrideLanguageId{get;set;}属性指定应用AnalysisHint的文档的语言提示。设置语言提示使得墨水分析器对象使用指定的语言而不是上下文节点中指定的语言。这个类也可以包含称为“PrefixText{get;set;}”的属性,它指定在将被识别的一行墨水之前写入或键入的文本。进一步来说,这个类可以包括称为“RecognitionModesRecognitionFlags{get;set;}”的属性,它指定识别处理在应用AnalysisHint的文档中的位置应遵循的特殊类型的模式。另外,这个类可以包括称为“SuffixText{get;set;}”的属性,它指定在将被识别的一行墨水之后写入或键入的文本,及称为“WordListWordList{get;set;}”的属性,它指定应由识别分析处理使用的单词的特殊集合。单词列表可以在用户实际上写入输入数据之前就知道期望的识别结果时使用,如期望在医药表单内写出的医药术语列表。进一步来说,这个类可以包括称为“WordMode{get;set;}”的属性。如果此值为“真”,则分析处理将调整自身以偏向于对整个分析区域返回单个单词。它也可以包括称为“Coerce{get;set}”的属性,它如果为“真”,则将强制分析处理将其结果限制在相关提示中设置的任何仿真陈述或单词列表值中。这个类也可以包括称为“AllowPartialDictionaryTerms{get;set}”的属性。如果此属性的值为“真”,则将允许识别分析处理返回来自它的识别字典中的不完整单词。在特殊实施例中,墨水分析API可以进一步包括AnalysisRegion类。这个类可以包括,例如,多个用于构造AnalysisRegion对象的构造函数。例如,它可以包含用于构造包含任何区域的AnalysisRegion对象的第一个构造函数,用于基于二维矩形的参数构造AnalysisRegion对象的第二个构造函数,及用于基于四个空间坐标构造AnalysisRegion对象的第三个构造函数。缺省的构造函数可以为,例如,创建空的区域。这个类也可以包含多个属性。例如,这个类可以包含称为“RectangleBounds{get;}”的属性,它检索AnalysisRegion的边界矩形;称为“IsEmpty{get;}”的属性,它指示相关的AnalysisRegion对象内部是否为空;及称为“IsInfinite{get;}”的属性,它指示相关的AnalysisRegion是否被设置为无限。这个类也可以包含多个方法,如称为“AnalysisRegionClone()”的方法,它克隆相关的AnalysisRegion对象。这个类也包括包含称为“Equals(AnalysisRegionotherRegion”的方法,它检验指定的AnalysisRegion对象(称为otherRegion)是否等同于相关的AnalysisRegion对象。如果指定的AnalysisRegion对象内部等同于相关的AnalsysisRegion对象的内部,此方法返回“真”,否则返回“假”。这个类可以进一步包含“Intersect(AnalysisRegionregionToIntersect)”方法,它剪切相关的AnalysisRegion对象为指定的分析区域。因此,结果AnalysisRegion对象将只包括和指定分析区域重叠或相交的区域。这个类也可以包含称为“Intersect(Rectanglerectangle)”的方法,它剪切相关的AnalysisRegion对象为指定的矩形。再次,结果AnalysisRegion对象将只包括和指定分析区域重叠或相交的区域。它也可以包括称为“MakeEmpty()”的方法,此方法把相关的AnalysisRegion对象内部初始化为空,及称为“MakeInfinite()”的方法,此方法把相关的AnalysisRegion占据的区域设置为无限。它可以进一步包括用于合并或分离不同的定义的区域的各种方法,如称为“Union(AnalysisRegionregionToUnion)”的方法,它指定合并或增加到相关AnalysisRegion对象的AnalysisRegion对象,和称为“Union(Rectanglerectangle)”的方法,它将指定的矩形合并到相关的AnalysisRegion对象。通过此方法,可以根据相关AnalysisRegion对象的坐标空间指定矩形。当然,这个类可以包含大量的其他方法,用于基于任何区域的所需定义合并区域或从另一个区域中抽取一个区域的。墨水分析API也可以包括识别结果类。如上述的很多类,识别结果类可以包括一个或多个构造函数。例如,这个类可以包括称为“RecognitionResult(Streamlattice)”的构造函数,它通过给定的识别网格构造识别结果对象。在特殊的实施例中,识别网格是识别处理结果序列化的形式。这个方法可以,例如,将识别网格指定为用于构建相关识别结果对象的字节数组。它也可以包括称为“RecognitionResult(ContextNodenode)的构造函数”,它通过给定的上下文节点构造识别结果对象。它也可以包括构造函数称为“RecognitionResult(stringText,intStrokeCount)”,它通过指定的文本值构造识别结果对象,它接下来关联于指定数量的笔触,且可以在识别处理没有对应于实际写出的墨水数据的替换识别值时用于修正。进一步来说,这个类可以包括称为“RecognitionResult(RecognictionResultleftRecognitionResult,RecognitionResultrightRecognitionResult)”的构造函数,它通过合并两个现有的识别结果对象来构造识别结果对象。识别结果类也可以包含一个或多个属性,如称为“StrokeCollectionStrokeCollection{get;}”的属性,它提供标识包含在单个墨水对象中的笔触集合的笔触索引数组,及称为“RecognitionAlternateTopAlternate{get;}”的属性,它提供识别结果的最佳替换。这个类也可以包括称为“RecognitionConfidenceRecognitionConfidence{get;}”的属性,它提供来自识别分析处理的当前结果的顶层替换选择的置信水平(如,强、中等或弱),及称为“stringTopString{get;}”的属性,它返回来自识别分析处理的分析结果的最佳结果字符串。识别结果类也可以包括多个方法,如称为“publicRecognitionAlternateCollectionGetAlternateCollectionFromSelection(selectionStart,selectionLength,maximumAlternates)”的方法,它指定来自识别分析处理的分析结果的最佳结果字符串内的选择的替换集合,其中每个替换只对应于一个墨水片段。此方法的输入参数可以包括,例如,指定从中返回替换集合的文本选择开始位置的值、指定从中返回替换集合的文本选择长度的值,及指定返回替换的最大数量的值。此方法可以从识别结果的最佳结果字符串内的选择中返回RecognitionAlternateCollection替换集合。识别结果类可以进一步包括称为“RecognitionResultMerge(RecognitionResultleft,stringseparator,RecognitionResultright)”的方法。此方法可以用来通过单个字符串创建新的识别结果对象,得到扁平的网格,附加单个字符串到现有识别结果对象开始或末尾,或在两个现有的识别结果对象之间连接单个字符串。这个类也可以包括称为“ModifyTopAlternate(RecognitionAlternatealternate)”的方法,它指定用已知的替换来修改识别结果。对某些实施例,缺省的识别分析处理的结果最佳结果字符串对应于顶层替换。然而,此方法可以用于指定将除顶层替换之外的替换用在识别分析处理结果中。如果新的顶层替换导致和原先不同的划分,ModifyTopAlternate方法将自动更新上下文节点来反映这些改变。为了检索可以用来修改识别结果的替换,此方法调用GetAlternatesFromSelection方法。这个类也可以包括称为“StreamSave()”的方法,它持续地维护形式为识别网格的相关识别结果对象。识别网格是用于表达识别处理结果的序列化的格式。墨水分析API也可以包括AnalysisOptions枚举类型。此类型可以包含一个或多个指定分析处理如何分析墨水数据的字段,如称为“constAnalysisOptionsDefault”的字段,它支持分析处理的所有可用选项。此字段可以,例如,支持文本识别、表的使用、列表的使用、注释的使用、连接器和容器的使用,及中间结果的使用。此类型也可以包括称为“constAnalysisOptionsEnableAnnotations”的字段,它启用和禁用注释的检测;称为“constAnalysisOptionsEnableConnectorsAndContainers”的字段,它启用和禁用连接器和容器的检测;及称为“constAnalysisOptionsEnableIntermediateResults”的字段,它启用和禁用返回使用不同的、顺序分析处理之间(如,解析处理和接下来的识别处理之间)的分析结果到软件应用。此类型也可以包括称为“constAnalysisOptionsEnableLists”的字段,它启用和禁用列表的检测;及称为“constAnalysisOptionsEnableTables”的字段,它启用和禁用表的检测。这个枚举类型进一步包括称为“constAnalysisOptionsEnableTextRecognition”的字段,它启用和禁用文本识别分析处理。然而,如果附加的分析处理可用(或同一分析处理的不同版本可用),则此类型可以相应地包括附加的AnalysisOption。进一步来说,墨水分析API可以包括AnalysisResultsEventArgs类。这个类可以有称为“publicAnalysisResultsEventArgs()”的构造函数,它创建包含分析结果的数据结构并在触发AnalysisResults事件时返回到软件应用。这个类也可以包括称为“InkAnalyzerInkAnalyzer{get;}”的属性,它标识执行分析处理的InkAnalyzer对象。API也可以包括Line类,它对将“Line”对象的使用识别为表示几何直线的某些类型的操作系统有用。这个类可以包括构造函数,如称为“publicLine(PointbeginPoint,PointendPoint)”的构造函数,它创建Line对象。这个类也可以包括各种属性,如称为“publicPointBeginPoint{get;set;}”的属性,它表示行对象的起点及称为“publicPointEndPoint{get;set;}”的属性,它表示行对象的终点。除了这些类,墨水分析API也可以包含RecognitionAlternate类。这个类可以包括表示墨水片段和识别器的字典比较产生的可能单词匹配的元素。例如,这个类可以包括称为“LineAscender{get;}”的属性,它提供存在于单个行(表示为两个点的行)上的RecognitionAlternate对象的上升行;称为“publicLineBaseline{get;}”的属性,它提供存在于单个行上的RecognitionAlternate对象的基线;和称为“LineDescender{get;}”的属性,它提供存在于单个行上的RecognitionAlternate对象的下降行。这个类也可以包括称为“RecognitionResultExtract{get;}”的属性,它提供当前的RecognitionAlternate对象的RecognitionResult对象。这个属性可以用于,例如,从包含该单词的行的RecognitionResult对象抽取单词的RecognitionResult对象。它也可以包括称为“LineMidline{get;}”的属性,它提供存在于单个行上的行中点RecognitionAlternate对象;称为“StrokeCollectionStrokes{get;}”的属性,它提供包含在墨水对象中的笔触集合(即,它提供表示关联于RecognitionResult的笔触的StrokeCollection),及称为“StrokeCollection[]StrokeArray{get;}”的属性,它提供包含在一个或多个墨水对象中的表示和RecognitionResult关联的笔触的笔触集合。这个类也可以包括称为“RecognitionConfidenceRecognitionConfidence{get;}”的属性,它提供识别分析处理在识别RecognitionConfidence对象或姿势时确定的置信水平(如,强、中等,或弱)。对非行节点,将返回最低的相关上下文节点的子节点RecognitionConfidence。它也可以包含称为“stringRecognizedString{get;}”的属性,它指定替换的结果字符串。因此,对单词上下文节点之上的任何上下文节点,通过此方法将结果字符串连接在一起。例如,行节点将包含结果字符串,结果字符串又包含所有其子节点或单词节点的结果。段落节点将包含结果字符串,结果字符串又包含所有其子节点或行节点的结果RecognitionAlternate类也可以包含一个或多个方法,包括例如,称为“StrokeCollection[]GetStrokesArrayFromTextRange(intselectionstart,intselectionlength)”的方法,它通过对应于已知文本范围的每个墨水对象指定StrokeCollection。这个类也可以包含称为“StrokeCollection[]GetStrokesFromStrokesArrayRanges(StrokeCollection[]strokesArray)”的方法,它指定包含已知输入笔触集合且识别器向其提供替换的最小笔触集合。更特别地,通过每个均包含该集合的笔触索引数组的墨水笔触的数组返回笔触。通过此方法返回的墨水笔触集合可以和输入集合匹配,或如果输入集合仅匹配包括所有输入笔触的最小的识别结果的部分,那么它可以更大。这个类可以进一步包括称为“StrokeCollectionGetStrokeFromStrokesRanges(StrokeCollectionstrokes)”的方法,它指定包含已知输入笔触集合且识别器可以对其提供替换的最小笔触集合;及称为“StrokeCollectionGetStrokesFromTextRange(intselectionstart,intselectionlength)”方法,它指定对应于已知文本范围的StrokeCollection。这个类可以进一步包括称为“voidGetTextRangeFromStrokes(refintselectionstart,refintselectionend,StrokeCollectionstrokes)”的方法,它指定识别器可以对其返回包含已知笔触集合的替换的已识别文本的最小范围;及称为“voidGetTextRangeFromStrokesArray(refintselectionstart,refintselectionend,StrokeCollection[]strokesarray)”的方法,它指定识别器可以对其返回包含已知笔触集合的替换的已识别文本的最小范围。它也可以包括称为“RecognitionAlternateCollectionSplitWithConstantPropertyValue(GUIDpropertyType)”的方法,它返回替换的集合,它们是对其调用此方法的替换的划分。集合中的每个替换都包含对传递到该方法中的属性有相同属性值的邻接识别片段。例如,此方法可以用于获取根据识别结果中的置信水平边界(强、中等,或弱)、行边界,或片段边界划分初始替换的替换。它可以进一步包括称为“byte[]GetPropertyValue(GUIDpropertyType)”的方法,它指定替换中的已知属性值,如替换中的识别器置信水平。然而,不是所有的识别分析处理都会提供所有的属性类型的值。因此,此方法提供由相关的识别分析处理支持的类型的数据。墨水分析API也包括RecognitionAlternateCollection类。如上述的其他类,这个类可以包括用于创建RecognitionAlternateCollection对象的称为“RecognitionAlternateCollection()”的构造函数。这个类也可以包括多个属性,如称为“Count{get;}”的属性,它提供包含在替换识别值的集合中的对象或集合的数目;称为“IsSynchronized{get;}”的属性,它提供指示对替换识别值集合的访问是否和软件应用同步(即,“线程安全”)的值;及称为“SyncRoot{get;}”的属性,它提供可用于同步对替换识别值集合的访问的对象。这个类也可以包含一个或多个方法,如称为“virtualvoidCopyTo(Arravarray,intindex)”的方法,它复制当前替换识别值集合中的所有元素到指定的一维数组,开始于指定的目标数组下标;及称为“IEnumeratorIEnumerable.GetEnumerator()”的方法,它是IEnumerable的标准实现,IEnumerable使得调用者能够使用foreach结构来枚举替换识别值集合中的每个RecognitionAlternate。这个类也可以包括称为“RecognitionAlternateCollectionEnumeratorGetEnumerator()”的方法,它返回包含识别替换值集合内的所有对象的RecognitionAlternateCollectionEnumerator。此方法可用于,例如,检索识别替换值集合中的每个对象。墨水分析API可以附加地包括RecognitionConfidence枚举和RecognitionMode枚举,它们都可以包含一个或多个和识别分析处理相关的字段。例如,RecognitionConfidence类可以包含多个字段,如称为“Intermediate”的字段,它指示识别分析处理确信正确结果在提供的替换识别值列表中;称为“Poor”的字段,它指示识别分析不确信结果在提供的替换识别值列表中;及称为“Strong”的字段,它指示识别分析处理确信替换识别值中的最佳替换是正确的。类似地,RecognitionMode类可以包括指定识别分析处理如何解释电子墨水数据并从而确定识别结果字符串的字段。例如,这个类可以包括称为“Coerce”的字段,它指定识别分析处理基于对上下文指定的仿真陈述强制产生识别结果;及称为“Line”的字段,它指定识别分析处理把电子墨水数据当作单个行。这个类也可以包括称为“None”的字段,它指定识别分析处理不应用识别模式;及称为“Segment”的字段,它指定识别分析处理将电子墨水数据视为由单个单词或字符构成。进一步来说,这个类可以包括称为“TopInkBreaksOnly”的字段,它禁用多个分段。进一步来说,墨水分析API可以包括ContextLink类,它定义如何将两个上下文节点链接在一起。ContextLink对象自身表示链接哪两个上下文节点、链接的方向及链接的类型。这个类可以包括称为“ContextNodeSourceNode{get;}”的属性,它指定链接到另一个上下文节点的源上下文节点;称为“ContextLinkTypeLinkType{get;}”的属性,它指定存在于源和目标上下文节点之间的链接关系的类型;及称为“CustomLinkType{get;}”的属性,它指定使用定制的链接。此情况在应用决定使用墨水分析器API的链接系统来表示API可以识别的范围之外的特定于应用的链接时会发生。这个类也可以包括称为“ContextNodeDestinationNode{get;}”的属性,它指定链接到另一个上下文节点的目标上下文节点。可能有两个构造函数对这个类可用,它们创建现有的源和目标上下文节点之间的关系。这个类也可以包括称为“ContextLinkTypeenum”的枚举,它定义由两个上下文节点共享的关系的类型。这些链接类型可以包括,例如,“AnchorsTo”类型,它描述一个节点锚接到另一个节点。基于解析情况,两个节点都可以使用SourceNode或DestinationNode属性。链接类型也可以包括“Contains”类型,这描述一个节点包含另一个节点。具备此关系,容器节点可以作为SourceNode引用,而被包含的节点可以作为DestinationNode引用。链接类型可以进一步包括“PointsTo”类型,它描述一个节点指向另一个节点。对此关系,进行指向的节点可以作为SourceNode引用,而被指向的节点可以作为DestinationNode引用。进一步来说,链接类型可以由“PointsFrom”类型,它描述从另一个节点指向一个节点。在此关系,从其他节点进行指向的节点可以作为SourceNode引用,而被从其他节点指向的节点可以作为DestinationNode引用。链接类型可以附加地包括“SpansHorizontally”类型,它描述一个节点跨越另一个节点的横向长度;及“SpansVertically”类型,它描述一个节点跨越另一个节点的纵向长度。对这些类型,覆盖(划出、强调、勾勒)其他节点的节点通常最后写出,并可以作为SourceNode引用,而被跨越的节点可以作为DestinationNode引用。链接类型也可以包括“Custom”类型,它描述使用了定制的链接类型。当使用此值时,ContextLink对象上的“CustomLinkType”属性可以对此链接的目的提供更多细节。应用模型窗口客户机集成了Web的特性和传统桌面应用的特性。应用模型提供安全应用的框架并简化客户机应用的开发、部属和维护。此框架提供简单和一致的用户体验。例如,本地应用可以利用熟悉的类似浏览器的特性,而不管应用是寄宿在浏览器中还是单独的应用,同时保留在本地客户机上执行的好处。此框架允许用户利用他们熟悉Web这一点,从而增加了用户的舒适水平并减少了学习使用新应用所需的时间。应用模型是System.Windows名字空间的一部分。使用应用模型的应用以类似于Web页面的方式工作。当用户浏览应用时,自动地安装应用而无需要求用户对安装进行确认、重启客户机系统或承担其他应用出错的风险。在一个实施例中,逐步下载应用,从而在完全下载该应用之前提供初始水平的交互性。应用的更新自动地进行并以对用户透明的方式进行。因此,用户总是能够访问应用的最新版本而无需明确地执行应用升级。使用应用模型的应用在客户机系统上本地运行,而不管客户机系统是在线(即,活跃地连接到Web)还是离线(即,没有活跃地连接到Web)。这允许应用提供比基于服务器的应用更好的性能,基于服务器的应用需要活跃的Web链接并通过Web和服务器持续地交互数据。在把应用安装到客户机系统上之后,可以通过“开始”菜单(象传统的桌面应用那样)或通过浏览到该应用(象Web应用那样)来访问应用。应用模型包括三个主要部分应用生命周期管理、应用框架和浏览框架。应用模型支持两种不同类型的应用“在线应用”和“管理的应用”。使用应用模型的应用可以在浏览器或独立的顶层窗口中执行。“在线应用”是通过服务器执行并寄宿在服务器中的应用。可以缓冲此应用以进行离线访问或此需要特定的在线资源才能正确执行应用。“管理的应用”是离线提供并安装在客户机上的。操作系统对管理的应用提供服务。可以将管理的应用的入口添加到客户机上的“开始”菜单。可以逐步下载应用,以允许用户在正在下载应用时开始和应用交互,而不是延迟交互直到安装处理完成。应用具有关联的应用清单,它描述应用的依存关系,如执行应用所需的附加库和资源。安装程序使用应用清单来控制应用的下载和安装。作为安装处理的部分来调用“信任管理器”。信任管理器使用应用清单来确定执行应用需要何种许可。应用清单也指定外壳信息,如文件关联及是否添加入口到开始菜单,以及该入口的图标和文本。使用应用模型的应用包括标记、代码、资源和清单。应用由其应用对象定义和限定,应用对象是每次应用会话期间持续存储在存储器中全局对象。应用对象知道所有属于应用的资源并提供其自身与其他应用或外部资源之间的边界。应用框架使用应用对象来识别、引用应用,并和应用通讯。应用对象也在应用内使用,以管理窗口和资源、指定启动和关闭行为、处理配置设置、指定应用的可视样式、在浏览之间共享代码、状态和资源,及处理应用范围的事件。浏览框架支持基于浏览的应用,此类利用用户熟悉浏览操作这一点并将Web上的活动写入日志,以在客户机系统上提供更加熟悉、一致的用户体验,而不管应用是寄宿在系统浏览器中或在独立的顶层窗口中。写日志是由浏览框架用来追踪浏览历史的处理。日志允许用户以线性浏览序列回扫他们向后和向前的步骤。无论浏览体验是寄宿在浏览器中还是在独立的浏览窗口中,每次浏览都持续存储在日志中,并可以通过使用“向前”和“向后”按钮或通过调用“向前”和“向后”方法以线性序列重新访问。每个浏览窗口都有相关联的日志。NavigationApplication类通过提供和浏览相关的属性和事件简化创建基于浏览的应用的任务。NavigationApplication类包括指定在应用最初启动时系统所浏览的页面或元素的启动属性。这个类也包括允许应用开发者跨页面共享全局状态信息而无需做出应用的子类,并支持到这些属性的数据绑定的属性集合。示例计算系统和环境图4展示在其中可以(或者完整或者部分)实现编程框架132的适合的计算环境400的例子。计算环境400可以在这里所述的计算机和网络架构中使用。例子计算环境400只是计算环境的一个例子且并不意味着对该计算机和网络架构的使用范围或功能有任何限制。也不应将计算环境400解释为对任何一个示例计算环境400中所示的组件或其组合有任何依存关系或需求。可以用大量其他通用或专用计算系统环境或配置来实现框架132。适合使用的众所周知的计算系统、环境和/或配置的例子包括,但不仅限于,个人计算机、服务器计算机、多处理器系统、基于微处理器的系统、网络PC、小型机、大型机、包括上述任何系统或设备的分布式计算环境等等。该框架的紧凑版本或子集可以在有限资源客户机,如手机、个人数字助理、手持计算机,或其他通讯/计算设备上实现。框架132可以在计算机可执行指令的通用上下文中说明,如由一个或多个计算机或其他设备执行的程序模块。通常,程序模块包括执行特殊任务或实现特殊抽象数据类型的例程、程序、对象、组件、数据结构等等。框架132也可以实现在分布式计算环境中,在其中任务由通过通讯网络连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地和远程计算机存储器存储媒体,包括存储器存储设备。计算环境400包括形式为计算机402的通用计算设备。计算机402的组件可以包括,但不仅限于,一个或多个处理器或处理单元404、系统存储器406及连接包括处理器404的各种系统组件到系统存储器406的系统总线408。系统总线408表示几种类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围设备总线,及使用多种总线结构中的任何一种的处理器或本地总线。作为例子,这样的结构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、扩展的ISA(EISA)总线、视频电子标准协会(VESA)总线,及亦称为中层楼总线的周边元件互连(PCI)总线。计算机402通常包括各种计算机可读媒体。这样的媒体可以为可由计算机402访问任何可用媒体并且包括易失和非易失媒体、可移动和不可移动媒体。系统存储器406包括形式为易失存储器(如随机访问存储器(RAM)410)和/或非易失存储器(如只读存储器(ROM)412)的计算机可读媒体。包含基本的例程以例如在启动过程中帮助在计算机402的元件之间传输信息的基本输入/输出系统(BIOS)414存储在ROM412中。RAM410通常包含可由处理单元404立即访问和/或当前正在操作的数据和/或程序模块。计算机402也可以包括其他可移动/不可移动、易失/非易失计算机存储媒体。作为例子,图4展示了用于读写不可移动、非易失磁媒体(未示出)的硬盘驱动器416,用于读写可移动、非易失磁盘420(如,“软盘”)的磁盘驱动器418,及用于读和/或写可移动、非易失光盘424(如CD-ROM、DVD-ROM或其他光学媒体)的光盘驱动器422。硬盘驱动器416、磁盘驱动器418和光盘驱动器422中的每个都通过一个或多个数据媒体接口426连接到系统总线408。作为选择,硬盘驱动器416、磁盘驱动器418和光盘驱动器422可以通过一个或多个接口(未示出)连接到系统总线408。磁盘驱动器及与它们关联的计算机可读媒体向计算机402提供对计算机可读指令、数据结构、程序模块和其他数据的非易失存储。虽然上述例子展示了硬盘416、可移动磁盘420和可移动光盘424,应理解,也可以使用其他类型的可以存储可由计算机访问的数据的计算机可读媒体,如盒式磁带或其他磁存储设备、闪存卡、CD-ROM、数字多用途盘(DVD)或其他光学存储、随机访问存储器(RAM)、只读存储器(ROM)、电子可擦可编程序只读存贮器(EEPROM)等等来实现示例计算系统和环境。可以在硬盘416、磁盘420、光盘424、ROM412和/或RAM410上存储任何数量的程序模块,这包括例如操作系统426、一个或多个应用程序428、其他程序模块430和程序数据432。操作系统426、一个或多个应用程序428、其他程序模块430和程序数据432(或其组合)中的每一个都可以包含编程框架132的元素。用户可以通过如键盘434和定点设备436(如,“鼠标”)这样的输入设备输入命令和信息到计算机402中。其他输入设备438(未具体示出)包括麦克风、操纵杆、游戏垫、圆盘式卫星电视天线、串行口、扫描仪和/或类似设备。这些和其他输入设备通常通过连接到系统总线408的输入/输出接口440连接到处理单元404,但也可以通过其他接口和总线结构,如并行口、游戏口,或通用串行总线(USB)来连接。显示设备442或其他显示设备也通过接口,如视频适配器444连接到系统总线408。除显示器442外,其他外围输入设备包括可以通过输入/输出接口440连接到计算机402的组件,如扬声器(未示出)和打印机。计算机402可以使用到一个或多个远程计算机(如远程计算设备448)的逻辑连接在连网环境中运行。作为例子,远程计算设备448可以是个人计算机、可移动计算机、服务器、路由器、网络PC、对等设备或其他普通网络节点等等。远程计算设备448在图示中是包括在此相对于计算机402所述的很多或所有元件和特性的可移动计算机。计算机402和远程计算机448之间的逻辑连接包括局域网(LAN)450和广域网(WAN)452。这样的连网环境在办公室范围或企业范围的计算机网络、内联网和因特网中是很常见的。当用在LAN连网环境中时,计算机402通过网络接口或适配器454与局域网450相连。当用在WAN连环境中时,计算机402通常包括调制解调器456或其他在广域网452上建立通讯的方法。调制解调器456,可以为内置的或外置的,通过输入/输出接口440或其他适当机制连接到系统总线408。应理解所示的网络连接是示范性的且可以使用在计算机402和448之间建立通讯连接的其他方法。在连网的环境中,如计算环境400所示,相对于计算机402说明的程序模块或其部分可以存储在远程存储器存储设备中。作为例子,远程应用程序458驻留在远程计算机448的存储器设备中。为了说明,应用程序和其他可执行程序组件,如操作系统,在此展示为离散的块,虽然应承认这样的程序和组件以不同的次数驻留在计算设备402中不同的存储组件内,并由计算机的数据处理器执行。框架132的实施例,更特别地,API142或对API142做出的调用可以存储在某种形式的计算机可读媒体上或通过它来发送。计算机可读媒体是可由计算机访问的任何可用媒体。作为例子,而非限制,计算机可读媒体可以包括“计算机存储媒体”和“通讯媒体”。“计算机存储媒体”包括以任何存储信息(如计算机可读指令、数据结构或其他数据)的方法或技术实现的易失和非易失、可移动和不可移动媒体。计算机存储媒体包括,但不仅限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多用途盘(DVD)或其他光学存储、盒式磁带、磁带、磁盘存储或其他磁存储设备,或可以用来存储所需信息并可以由计算机访问的任何其他媒体。“通讯媒体”通常以调制的数据信号(如载波或其他传输机制)实现计算机可读指令、数据结构、程序模块或其他数据。通讯媒体也包括任何信息发送媒体。术语“调制的数据信号”指设置或改变它的一个或多个属性从而在该信号中编码信息的信号。作为例子,而非限制,通讯媒体包括有线媒体(如有线网络或直接连接)及无线媒体(如声音、无线电、红外线和其他无线媒体)。上述任何媒体的组合也包括在计算机可读媒体的范围之中。作为选择,框架的部分可以用硬件或硬件、软件和/或固件的组合来实现。例如,可以设计或编程一个或多个专用集成电路(ASIC)或可编程逻辑设备(PLD)来实现该框架的一个或多个部分。概念上来说,编程接口可以一般地视为如图5或图6所示的那样。图5展示接口1,第一个和第二个代码段将其作为通讯的管道。图6展示由接口对象I1和I2(它可以是第一个和第二个代码段的部分,也可以不是)组成的接口,接口对象I1和I2使得系统的第一个和第二个代码段能够通过媒体M通讯。在图6的视图中,可以将接口对象I1和I2视为同一系统的独立接口,也可以视为对象I1和I2加上媒体M构成了接口。虽然图5和图6展示了在流的每一边都有双向的流和接口,特定的实现可以只包括一个方向上的信息流(或没有如下所述的信息流),或可以在一边只有一个接口对象。作为例子,而非限制,如编程接口或程序接口(API)、入口点、方法、函数、子例程、远程过程调用和组件对象模型(COM)接口这样的术语都包含在编程接口的定义之内,这样的编程接口的各方面可以包括第一个代码段发送信息(其中“信息”以其最广泛的含义使用并包括数据、命令、请求等等)到第二个代码段的方法;第二个代码段接收信息的方法;及信息的结构、序列、语法、组织、方案、时间和内容。在这点上,只要以由接口定义的方式传输信息,下层传输媒体自身对接口的操作就不重要,无论是有线或无线媒体,还是两者的组合。在特定的情况下,当信息传输可以通过其他机制传输进行(如,将信息存放在独立于代码段之间信息流的缓冲、文件内等等)或不存在,如一个代码段简单地访问由第二个代码段执行的功能时,信息可以不在常规意义上的一个或两个方向上传输。在给定的情况下,任何或所有这些方面都可能很重要,如取决于代码段是否是松散连接或紧密连接配置的系统的一部分,且因此这个列表应被视为是说明性而非限制性的。编程接口的概念为熟悉技术的人所知,并从上述对本发明的详细说明中可以清楚地理解。然而,存在实现编程接口的其他方法,并且除非明确排除,它们也将包括在说明书后面的权利要求范围内。这样的其他方法会比图5和图6中的简单视图复杂,但是它们执行类似的功能,实现同样的整体效果。下面简要地说明编程接口的一些演示性的替换实现。A.分解从一个代码段到另一个代码段的通讯可以通过将通讯划分为多个离散的通讯间接地实现。这在图7和图8中示意性地展示。如所示,某些接口可以根据可划分的功能集合来描述。因此,可以分解图5和图6的接口功能来实现相同的效果,就像可以在数学上提供24或2乘2乘3乘2。因此,如图7所示,可以划分由接口1提供的功能以将该接口的通讯转换到多个接口中接口1A、接口1B、接口1C等等,而实现相同的效果。如图8所示,由接口I1提供的功能可以划分为多个接口I1a、I1b、I1c等等而实现相同的效果。类似地,第二个代码段的接收来自第一个代码段的信息的接口I2可以分解为多个接口I2a、I2b、I2c等等。当分解时,包括在第一个代码段内的接口数量不需要和包括在第二个代码段中的接口数量匹配。在图7与图8中,接口1和I1的功能大意各自保持和图5与图6相同。接口的分解也可以遵循关联、交换和其他数学属性以使得分解难以识别。例如,操作的顺序可能不重要,并且因此由一个接口执行的功能可以在达到该接口之前由另外的代码或接口执行,或由系统的独立组件执行。再者,有普通编程技术水平的人可以理解,存在做出实现相同效果的不同函数调用的各种方法。B.定义在某些情况下,可能忽略、增加或修订编程接口的特定方面(如参数)而仍然实现预定结果。这在图9和图10中展示。例如,假设图5的接口1包括函数调用Square(input,precision,output),该调用包括三个参数,input、precision和output,且从第一个代码段将其提交到第二个代码段。如果在给定的情景下不关心中间的参数precision,则如图9所示,可以忽略它或甚至用无意义的参数(在此情况)来替换它。也可以增加不关心的附加参数。在两种情况中,平方的功能都可以实现,只要在输入由第二个代码段平方后返回输出。对某些下游或计算系统的其他部分,Precision可能是有意义的参数;然而,一旦认为对计算平方的有限目的不需要precision,则可以替换它或忽略它。例如,可以传递无意义的值,如出生率,而不是传递合法的precision值,但不会对结果产生负面影响。类似地,如图10所示,接口I1由接口I1’替换,修订为忽略或增加参数到该接口。接口I2可以类似地修订为接口I2’,修订为忽略不需要的参数或可以在别处处理的参数。这里的关键是在某些情况下编程接口可以包括对某些目的不需要的方面,如参数,从而对其他目的可以忽略或修订或在别处处理它们。C.内联编码合并两个独立代码模块的部分或全部功能,以使得它们之间的“接口”改变形式也是可行的。例如,图5和6的功能各自可以转换为图11和12的功能。在图11中,前面图5中的第一个和第二个代码段合并为一个包含两者的模块。在此情况,代码段仍然彼此通讯,但是接口可能采取更加适合于单个模块的形式。因此,例如,可能不再需要正式的调用和返回语句,但是按照接口1进行的类似处理或响应仍然有效。类似地,如图12所示,图6的接口I2的部分(或全部)可以内联写入到接口I1中以构成接口I1”。如所示,接口I2被划分为I2a和I2b,接口部分I2a已用接口I1内联编码来构成接口I1”。对实际的例子,考虑图6的接口I1执行函数调用square(input,output),它由接口I2接收,接口I2在用第二个代码段处理通过input传递的值(对其进行平方)之后,用output传回平方的结果。在这样的情况下,由第二个代码段执行的处理(平方input)可以由第一个代码段执行而不调用该接口。D.分离从一个代码段到另一个代码段的通讯可以通过将通讯分解为多个离散的通讯间接地实现。这在图13和图14中展示。如图13所示,提供一个或多个中间件(分离接口,由于它们从初始的接口分离功能和/或接口函数)以转换第一个接口(接口1)上的通讯,使之符合不同的接口,在此例中为接口2A、接口2B和接口2C。在安装了设计为根据接口1的协议和操作系统通讯的应用,但是操作系统改变为使用不同的接口(在此例中为接口2A、接口2B和接口2C)时,可以实现这样的结构。关键是由第二个代码段使用的初始的接口发生了改变,从而它不再和第一个代码段使用的接口兼容,因此使用中间层以使得旧接口和新接口兼容。类似地,如图14所示,可以引入第三个代码段,从而用分离接口DI1接收来自接口I1的通讯,用分离接口DI2发送接口功能到,例如,重新设计为对DI2工作但是提供相同的功能效果的接口I2a和I2b。类似地,DI1和DI2可以共同工作以将图6的接口I1和I2的功能转换到新的操作系统,而提供相同或近似的功能效果。E.重写另一种可能的情况是动态地重写代码以用其他实现相同总体效果的代码替换接口功能。例如,存在这样的系统,它们在(如由.Net框架、Java运行库环境,或其他类似的运行时类型环境提供的)执行环境中向运行时编译执行的(JIT)编译器或解释器提供以中间语言(如MicrosoftIL、Java字节码等等)出现的代码段。可以写出JIT编译器,以动态地转换从第一个代码段到第二个代码段的通讯,即,符合如第二个代码段(初始的或不同的第二个代码段)所要求的不同的接口。这在图15和16中展示。如图15所示,此方法类似于上述的分离情况。在安装了设计为根据接口1的协议和操作系统通讯的应用,但是操作系统改变为使用不同的接口时,可以实现这样的结构。可以使用JIT编译器即时使得来自安装的应用的通讯符合操作系统的新接口。如图16所示,这种动态地重写接口的方法可以应用于动态的因素,或相反地修改这些接口。应注意通过替换实施例实现和接口相同或类似的效果的上述情景也可以根据各种方法进行组合,串行和/或并行、或用其他中介代码。因此,上述替换实施例不是互斥的,且可以混合、匹配并合并,以产生与图5和图6所展示的通用情景相同或等价的情景。也应注意,对多数编程结构,存在实现和接口相同或类似功能的其他类似方法,没有在此对他们进行说明,但是它们由本发明的精神和范围所代表,即,应注意它至少是由支撑接口价值的接口表示的部分功能及其带来的优点。结论虽然已用特定于结构特性和/或方法动作的语言对本发明进行了说明,应理解在所附的权利要求中定义的本发明不限于所述的具体特性或动作。相反,所揭示的具体特性和动作是实现所请求的发明的示范形式。权利要求1.一种包含在一个或多个计算机可读媒体上的编程接口,其特征在于,所述编程接口包括涉及产生图形组件的第一组服务;涉及绑定类属性到数据源的第二组服务;及涉及格式化内容的第三组服务。2.如权利要求1所述的编程接口,其特征在于,所述第一组服务包括确定图形组件外观的服务。3.如权利要求1所述的编程接口,其特征在于,所述第一组服务包括确定图形组件行为的服务。4.如权利要求1所述的编程接口,其特征在于,所述第一组服务包括确定图形组件安排的服务。5.如权利要求1所述的编程接口,其特征在于,所述第一组服务包括多个嵌套的定义图形组件的原类型控件。6.如权利要求1所述的编程接口,其特征在于,所述图形组件由矢量图形定义。7.如权利要求1所述的编程接口,其特征在于,进一步包括涉及用动画呈现至少一个图形组件的第四组服务。8.如权利要求1所述的编程接口,其特征在于,进一步包括涉及创建具有浏览能力的应用的第四组服务。9.如权利要求1所述的编程接口,其特征在于,进一步包括涉及支持电子墨水处理系统的第四组服务。10.如权利要求1所述的编程接口,其特征在于,进一步包括涉及组合多种不同媒体类型的第四组服务。11.如权利要求1所述的编程接口,其特征在于,进一步包括涉及使用浏览器类型的接口在客户机上执行应用的第四组服务。12.如权利要求1所述的编程接口,其特征在于,进一步包括涉及自动地安装和执行应用的第四组服务。13.如权利要求1所述的编程接口,其特征在于,进一步包括涉及序列化内容的第四组服务。14.如权利要求1所述的编程接口,其特征在于,进一步包括涉及自动化用户接口的产生的第四组服务。15.一种软件架构,其特征在于,所述架构包括如权利要求1所述的编程接口。16.一种包含在一个或多个计算机可读媒体上的编程接口,其特征在于,所述编程接口包括涉及在显示内容之前格式化该内容的第一组服务;涉及绑定类属性到数据源的第二组服务;及涉及产生图像效果的第三组服务。17.如权利要求16所述的编程接口,其特征在于,所述第一组服务包括安排多个数据元素。18.如权利要求16所述的编程接口,其特征在于,所述第三组服务包括用动画呈现至少一个图形项。19.如权利要求16所述的编程接口,其特征在于,进一步包括涉及创建允许应用的用户在多个图形之间浏览的应用的第四组服务。20.如权利要求16所述的编程接口,其特征在于,进一步包括涉及编辑原先创建的内容的第四组服务。21.如权利要求16所述的编程接口,其特征在于,进一步包括涉及管理从输入设备接收的输入的第四组服务。22.如权利要求16所述的编程接口,其特征在于,进一步包括涉及支持与其他计算系统之间的互操作性的第四组服务。23.一种包含一个或多个微处理器和一个或多个软件程序的计算机系统,所述一个或多个软件程序使用应用编程接口来请求来自操作系统的服务,所述应用编程接口包括用于请求所述服务的独立命令,其特征在于,所述服务包括下面的几组服务涉及产生图形对象的第一组服务;涉及创建图形对象组件的第二组服务;及涉及修改图形对象外观的第三组服务。24.如权利要求23所述的计算机系统,其特征在于,所述第一组服务包括用于定义至少一个图形对象的行为的服务。25.如权利要求23所述的计算机系统,其特征在于,所述第一组服务包括用于定义图形对象的安排的服务。26.如权利要求23所述的计算机系统,其特征在于,所述修改图形对象的外观包括用动画呈现图形对象。27.如权利要求23所述的计算机系统,其特征在于,所述第二组服务包括用于产生几何形状的服务。28.如权利要求23所述的计算机系统,其特征在于,所述应用程序接口进一步包括涉及格式化文本的第四组服务。29.一种方法,其特征在于,所述方法包括调用第一组一个或多个函数以帮助格式化数据;调用第二组一个多多个函数以帮组创建图形对象;及调用第三组一个或多个函数以帮助改变图形对象的外观。30.如权利要求29所述的方法,其特征在于,进一步包括调用第四组一个或多个函数以帮助使用多个图形对象产生用户接口。31.如权利要求29所述的方法,其特征在于,进一步包括调用第四组一个或多个函数以帮助用户接口的运行时创建。32.如权利要求29所述的方法,其特征在于,进一步包括调用第四组一个或多个函数以帮助使用多个图形对象产生用户接口;及调用第五组一个或多个函数以帮助用户接口的运行时创建。33.如权利要求29所述的方法,其特征在于,所述第一组函数帮助接收用户输入;及在显示屏上安排数据元素。34.如权利要求29所述的方法,其特征在于,所述第二组函数帮助产生几何形状。35.如权利要求29所述的方法,其特征在于,所述第二组函数帮助产生至少一个几何形状,且所述第三组函数帮助修改所述几何形状的外观。36.一种系统,其特征在于,所述系统包括展现支持创建多个几何形状的第一组函数的方法;展现支持改变安排几何形状的方式的第二组函数的方法;及展现支持修改几何形状外观的第三组函数的方法。37.如权利要求36所述的系统,其特征在于,所述第二组函数进一步支持在将呈现的页面上安排几何形状。38.如权利要求36所述的系统,其特征在于,所述多个几何形状包括直线。39.如权利要求36所述的系统,其特征在于,所述第三组函数进一步支持关联图像效果和至少一个几何形状。40.如权利要求36所述的系统,其特征在于,所述第三组函数进一步支持在一段时间上改变特殊几何形状的外观。41.如权利要求36所述的系统,其特征在于,进一步包括展现支持使用多个几何形状产生用户接口的第四组函数的方法。42.如权利要求36所述的系统,其特征在于,进一步包括展现支持关联图形对象和一个或多个数据源的第四组函数的方法。43.如权利要求36所述的系统,其特征在于,进一步包括展现支持显示图形对象特定于数据的版本的第四组函数的方法。44.一种方法,其特征在于,所述方法包括调用第一组一个或多个函数以帮助创建图形对象的组件;调用第二组一个或多个函数以帮助产生图形对象;调用第三组一个或多个函数以帮助修改图形对象的外观;调用第四组一个或多个函数以帮助安排图形对象;及调用第五组一个或多个函数以帮助关联图形对象和数据源。45.如权利要求44所述的方法,其特征在于,进一步包括调用第六组一个或多个函数以帮助在内容的多个显示之间进行浏览。46.如权利要求44所述的方法,其特征在于,所述图形对象的组件包括多种形状。47.如权利要求44所述的方法,其特征在于,所述第二组函数进一步帮助产生用户接口。48.如权利要求44所述的方法,其特征在于,所述第三组函数包括修改特殊图形对象外观的函数。49.如权利要求44所述的方法,其特征在于,所述第三组函数包括修改一个或多个图形对象组件的外观的函数。50.如权利要求44所述的方法,其特征在于,所述第三组函数包括将图形对象移动到显示屏上的不同位置的函数。51.如权利要求44所述的方法,其特征在于,所述第三组函数修改图形对象的外观以响应用户输入。52.如权利要求44所述的方法,其特征在于,所述第四组函数修改图形对象的安排以响应用户输入。53.一种开发程序的方法,其特征在于,所述方法包括访问选择图形图像组件的第一组函数;访问产生图形图像的第二组函数;访问修改至少一个图形图像组件的外观的第三组函数;及访问格式化和图形图像关联的内容的第四组函数。54.如权利要求53所述的方法,其特征在于,所述图形图像为用户接口。55.如权利要求53所述的方法,其特征在于,所述内容为文本信息。56.如权利要求53所述的方法,其特征在于,所述内容为图形数据。57.如权利要求53所述的方法,其特征在于,进一步包括访问关联图形图像组件和数据源的第五组函数。58.如权利要求53所述的方法,其特征在于,所述第三组函数进一步修改和至少一个图形图像组件关联的行为。全文摘要一种编程接口提供生成应用软件、文档、媒体表示和其他内容的函数。这些函数允许开发者获取来自操作系统、对象模型服务或其他系统或服务的服务。文档编号G06F3/14GK1609792SQ20041007850公开日2005年4月27日申请日期2004年9月13日优先权日2003年10月24日发明者J·L·伯格丹,R·A·雷耶申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1