Runtime Form Designer(2)

     

      写在前面:运行时窗体设计器Runtime Form Designer一出现,就会以其出色的表现,奇怪的代码吸引,怎么说是奇怪的代码呢?设计器所使用到的ImenuCommandService,InameCreationService,ItoolboxService,IUIService,IdesignerHost,IselectionService 这些接口,使用过没用?在设计一个运行时设计器时,忽然学得,自己是在学习一个新的语言,是使用.Net来表示的底层界面接口语言。简单而言,.Net已经帮助你写好了底层的底层,那就是编写设计的接口。你只要继承或重写代码,就可以实现设计器的功能。查看重要的Form设计器用这个网址:
http://www.myfirm.cn/News/DotNetUserInterface/20080221013104408.html
为了使用最简单的方式来说明问题,使用最简单的设计器来做说明,下面介绍Hosting

效果图
 

所有代码图
 
这个项目,相当的小,上面显示的就是所有的源文件,可以高兴地认为,只要学会了上面的类,就成功了。事实上,只要学会几个重要的类,就可以了。

重点研究的接口
在理解下面接口的时候,可以理解为,自己是微软的高级工程师,正在为VisualStudio开发工具箱,界面,界面,菜单等等界面功能。
IMenuCommandService
提供的方法用于管理设计模式下可用的全局设计器谓词和菜单命令,以及显示某些类型的快捷菜单。
简单说,就是新建的控件,在窗体Form中产生的命令,如移动,对齐,层次叠放,复制,剪切,粘贴
INameCreationService
提供可以生成对象的唯一名称的服务。
因为各个拖出来的控件都必须有唯一的名称,这样,才可以编译通过的。
IToolboxService
提供在开发环境下管理和查询工具箱的方法和属性。
这就是一个工具箱,一个同工具箱提供一样功能的服务。
IDesignerHost
提供用于管理设计器事务和组件的接口。
这是最重要的接口,所有的控件都是由这个接口发出,可以理解为,从这个接口可以找到所有控件的引用。
ISelectionService
为设计器提供用于选择组件的接口。
就是当程序运行时,在Form设计器选择控件时,产生的事件,它常常被用来更新属性窗口。
IUIService
启用与开发环境对象(正在承载设计器)的用户界面的交互。
PropertyGrid
这不是一个接口,这只是一个控件,不过,提供了属性设置服务,是用户交互最频繁的服务之一。

服务的加载
可以这样理解,运时时Form设计器,就是一个服务的集合,服务管理器ServiceContainer初始化之后,绑定DesignerHost,然后不断增加服务,如
InameCreationService,名字唯一服务
ItoolboxService,工具箱服务
ImenuCommandService,菜单命令服务
IselectionService,选择服务(同时产生选择变化事件,从而改变属性显示)
PropertyGrid,属性设置服务
最后,由DesignerHost做激活动作,host.Activate();

关于命令服务
在运行时设计器中,要删除选定的控件,只能使用命令接口提供的功能。如
menuService.GlobalInvoke(StandardCommands.Delete);
当然,一个很高明的做法是,一开始就将DesignerHost的所有可能的命令纳入线程的管理,在designerhost.exe,中有使用。你可以在上一篇介绍Runtime Form Designer的文章中,找到这个控件的链接。

下一篇,将介绍Runtime FormDesigner的运行和编译机制,不可错过。

 

引自:http://www.myfirm.cn/News/dotNetUserInterface/20080224094801410.html

 

posted @ 2009-12-16 13:16  忠歌  阅读(343)  评论(0)    收藏  举报