仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 735|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计用.NET完成所见即所得的计划器

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。计划  择要

  本文会商了怎样利用C#编写一个所见即所得的计划器,剖析了计划器的基础道理,大概碰到的手艺成绩,和怎样挪用.NET框架来完成一个计划器。

  版权声明

  本文是XDesigner软件事情室撰写,XDesigner软件事情室具有本文版权,转载请说明出处,并保存本版权声明。

  媒介

  跟着盘算机信息体系不休深切开展,其体系布局请求愈来愈天真,这类天真性就是体现为程序的高度可设置性,大概使用程序的事情流程能够任意改动,用户界面也能够任意改动,面临这类不休加强的天真,是不成能经由过程修正程序代码来完成的,使用体系自己必要产生深入变更,必要完成很强的扩大性和天真性。别的z专门用于修正体系设置的核心工具也长短常主要的。这些体系核心定制工具很年夜一部分就是一些所见即所得的计划器。好比事情流体例工具,WinForm或WebForm界面计划器,而报表计划器也是典范的核心定制工具。

  总所周知,所见即所得的计划器是个相称庞大的程序,起首它必要庞大的图形化用户界面编程,包含图形的绘制,鼠标键盘事务的处置,还要抗屏幕闪灼。其次另有它背景的数据保护处置,包含用户界面和数据的同步,数据的构造布置,和加载和保留文档的处置。并且这些处置历程能够算是胶葛在一同,必要十分仔细当心的剖析计划,细心编码。

  本文就是切磋怎样完成一个所见即所得的计划器。关于本文,能够参考作者的另外一篇文章-怎样利用C#编写文本编纂器。

  计划器范例

  计划器依照用户界面和利用体验,能够分为两种形式,一种是基于直角坐标体例,另外一种是基于流式排版体例。微软的Visio就是典范的直角坐标体例,而Word则是流式排版体例,而VS.NET的WebForm窗体计划器就是这二者的分离。

  在直角坐标体例的计划器中,计划元素是利用XY坐标来在计划视图中定位的,关于矩形元素一样平常指定它的左上角的地位来定位,计划者必要指定计划元素的地位,偶然还要设置它的巨细。关于线段必要指定两个端点的XY坐标。计划者只需设置好了各个元素的地位巨细就完成了计划文档的基础布局,剩下的就是设置各个元素各自的内容了。

  在流式排版计划器中,计划元素是不必要指定地位的,是依据一样平常依据从左到右,从上到下的分列准绳添补到计划视图中(但偶然会酿成其他分列准绳)。计划元素的地位是静态盘算的。流式计划器大概还要利用键盘间接输出文本,必要显现光标。流式排版计划器能够看做笔墨处置器。

  这两种计划器用户界面和利用体验纷歧样,因而其程序处置的体例也纷歧样,直角坐标计划器存在计划元素间互相掩盖,这影响画图,别的还必要大批的鼠标拖拽操纵,必要仔细处置鼠标事务,但键盘事务处置得未几。而流式排版计划器中元素不会互相掩盖,因而绘制起来便利点,鼠标事务处置未几,但键盘事务处置的多,别的还必要处置光标。但这两种计划器它的文档工具模子有对照年夜的相似性。

  在本文中,以下只会商直角坐标体例的计划器。

  计划器的功效

  团体以为一个计划器应该完成的功效有

  ・计划文档的加载和保留,计划器能够将以后计划的内容保留到一个文档中,这个文档能够保留到文件中,也可保留到数据库或某个服务器中。计划器能够加载文档来完整重现前次的计划了局。

  ・计划器能够疾速正确的绘制文档视图,当视图巨细凌驾计划地区时,用户界面应该呈现转动条来举行转动操纵。

  ・以后有交换式计划体验,用户可使用鼠标拖拽操纵来改动元素的地位巨细等结构设置,用户改动了元素的结构或某些属性时,必需当即更新文档视图,并且更新地区应该只管小。

  ・撑持所见即所得的计划体验,当计划器必要举行图形输入,比方输入图片或打印时,用户在计划器中的计划视图应该和输入的图形坚持分歧。

  ・只管削减屏幕闪灼。这必要绘制图形或更新视图时必要举行优化,尽快完成绘制操纵。

  ・若计划器必要举行扩大时,计划器应该供应充足的扩大才能,开辟职员能够在这个计划器的基本上增加新的特征,使得计划器能显现新款式的文档视图。而且加载和保留文档时也能处置新的文档布局。

  ・若必要能够撑持VBA剧本,用户能够编写VBA剧本来把持计划器,包含其计划的文档内容。

  文档工具模子

  关于盘算机程序,背景决意前台,而计划器的背景就是文档工具模子。信任人人对文档工具模子有所懂得,我们在WEB页面中利用JAVASCRIPT剧本时就是会见了HTML文档工具模子,我们操纵XML文档就是会见XML文档工具模子。

  W3C国际构造对文档工具模子是如许界说的(摘自http://www.w3.org/DOM/)

  TheDocumentObjectModelisaplatform-andlanguage-neutralinterfacethatwillallowprogramsandscriptstodynamicallyaccessandupdatethecontent,structureandstyleofdocuments.Thedocumentcanbefurtherprocessedandtheresultsofthatprocessingcanbeincorporatedbackintothepresentedpage.ThisisanoverviewofDOM-relatedmaterialshereatW3Candaroundtheweb.

  以我团体的英文程度翻译以下

  文档工具模子是一种言语中立的接口或平台,程序或剧本能使用它来会见和更新布局化的文档。这些文档能够被进一步的处置,处置了局能够构成一个无效页面。这是W3C对web上的对文档工具模子道理的一样平常意见。

  我团体以为,关于编程,文档工具模子其次要内容就是,面临对照庞大的文档,利用面向工具的编程头脑,利用一个个程序天下中的工具来映照文档中的每个特定的部分。加载文档时,能够剖析文档,并把其暗示的内容映照为一个个工具,此时使用程序能够修正这些工具的数据,当保留文档时,能够将这些工具数据构造起来依照特定的格局保留到文档中。如许程序就经由过程会见文档工具来会见文档,也能够修正文档工具来修正文档,云云完成了对庞大文档的处置。文档工具模子是处置庞大文档的尺度操纵形式。

  计划器处置的是庞大的文档,因而也必要利用文档工具模子。文档工具模子可分为三年夜部分:文档基础元素,文档工具和各类范例的从文档基础元素派生出的文档元素。

  文档基础元素是全部文档工具模子的最基本的工具(就像Object范例是.NET工具团体的基本一样),它界说了文档元素的通用接口,一样平常界说为笼统类,范例称号能够为DesignElement。

  文档工具是文档工具模子的顶级工具,它包括了全部文档的内容,其范例称号能够为DesignDocument。

  各类范例的文档元素,它是派生自文档基础元素范例,用于形貌文档中各类实践存在的元素。个中能够界说一种文档元素,它们能够包容其他的文档元素,这些元素就是容器元素。实践上文档工具就是最年夜的容器元素。因为文档工具模子中存在容器元素,因而一切的工具都构成一个树状布局,称为文档工具树,个中根节点就是文档工具。各类文档元素是文档工具模子的活泼份子,扩大文档工具模子年夜部合作作就是扩大这些文档元素,扩大文档元素必要扩大它们的两个功效,一个是文档的加载和保留,一个就是文档自己保留的数据。

  文档工具模子能够和用户界面相干,也能够不相干,比方XML文档工具模子是无用户界面的。计划器的文档工具模子是和用户界面相干的,对此,扩大计划文档工具模子的文档元素时还必要扩大它们的绘制图形的才能以便计划器能绘制新型的文档元素图形。

  关于计划文档工具模子,其文档基本元素能够界说的内容有三个方面,文档的加载和保留,用户界面相干的接口,保护文档工具树的接口。

  文档的加载和保留

  计划文档能够保留为二进制文档,纯文本文档和其他格局,在此保举利用XML文档格局。其优点是

  ・计划文档工具模子和XML文档工具模子都属于文档工具模子,二者道理和布局上都有着很年夜的类似性,计划文档元素和XML文档元素能够存在逐一对应的干系。因而利用XML文档加载和保留计划文档工具是很天然的,完成起来对照复杂。

  ・XML文档是国际尺度的文档格局,十分开方,其他使用程序很简单使用计划器天生的文件,简化了计划器和其他使用体系的数据接口。

  ・已存在尺度的XML文档剖析器和XML文档工具模子,因而不需本人处置XML文档,只需挪用尺度库加载XML文档工具模子,然后依照逐一对应的干系来天生计划文档工具模子。

  ・利用XML文档有益于坚持计划器的各个版本间的兼容性。只需XML文档布局不产生年夜变更,低版本的计划器能够加载高版本的计划器天生的文档,一样高版本的计划器也很简单加载低版本的计划器天生的文档。若利用二进制文件格局,则计划器必要编写关于分歧版本的计划文档的预处置器,对照贫苦并且很难做到向上兼容。

  在保留工具数据到XML文档时,保留体例有两种,保留到XML属性和保留到XML元素。当指定某个XML元素用于保留工具数据时,若利用保留到XML属性时,会对工具每个属性,将其数据保留到指命名称的XML属性中,而保留到XML元素时,会在以后的XML节点下新增一个指命名称的XML子元素。然后将属性值保留到XML子元素中。这两种体例天生的XML片段为

  <ELEMENTattributename2="value2"attributename1="value1"/>

  和

  <ELEMENT>
   <ATTRIBUTENAME1>value1</ATTRIBUTENAME1>
   <ATTRIBUTENAME2>value2</ATTRIBUTENAME2>
  </ELEMENT>

  面临这两种体例,我倡议选择第二种,其缘故原由有:

  ・若保留到XML属性,则当工具属性对照多是,利用缩进体例输入的XML文档将对照宽,在检察是会呈现横向转动条,倒霉于浏览。而保留到XML元素时,XML文档不会很宽,便于浏览。

  ・若多行文本保留到XML属性,则一样平常不会以多行文本的体例保留,倒霉于浏览。而保留到XML元素时,则保留的文本和实践的文本对照靠近,便于浏览。

  ・若保留到XML属性,则保留体例只能是一个属性字符串,而保留到XML元素时则保留的体例很简单举行扩大。

  ・固然保留到XML属性体例天生的XML文档比保留为XML元素的体例要小,但XML文档格局的计划方针是便利保留数据和互换数据,而不在意文档是不是冗余,因而我们选择保留体例时不用在意XML文档的巨细。并且一样平常计划文档的内容不良多,以今朝盘算机硬件前提不必在乎XML文档巨细。

  当计划器从XML文档加载计划文档时,起首天生XML文档工具树,然后依据逐一对应的干系来天生计划文档工具树,此时必要从XML元素保留的信息来判别该XML元素是对应于那种计划文档元素,计划器能够从XML元素称号来判别,也能够从某个XML属性来判别,在此我利用XML元素称号来判别,起首是针对一个XML元素,取得其称号比取得某个属性值要便利,其次是XML称号是一定存在的,一定不为空,而XML属性则大概因为某种缘故原由而缺掉,XML称号比XML属性要不乱。

  基于上述的熟悉,当接纳XML文档作为保留体例时,计划基本元素必要界说两个虚函数,一个用于从XML文档加载工具属性数据,另外一个要向XML文档保留工具数据。而其他文档元素工具则依据必要重载这两个函数来完成本人的加载和保留工具属性的操纵,关于容器元素,还必要保留子元素数据到XML文档和从XML文档加载子元素。固然在实践使用中还要依据必要界说一些帮助成员来匡助加载和保留XML文档。

  计划器天生的XML文档一样平常保留为文件情势,固然能够依据必要来保留的数据库里大概上传到各类服务器中。若间接保留到数据库中,则全部使用体系中一切的计划器编纂的都是统一个文档版本,并且一旦保留即可当即使用。

  用户界面相干的接口

  计划器必要绘制文档视图,则必要计划文档工具模子供应撑持。因而文档基础元素必要界说两类通用接口,一个是和绘制文档相干的接口,一个是处置鼠标键盘事务相干的接口。

  绘制文档相干接口

  年夜部分文档元素必要在文档视图中绘制内容,因而它们必要重载绘制文档的接口,这类接口次要有两个函数,一个是盘算元素巨细的函数,一样平常定名为RefreshSize,一个是绘制元素的函数,一样平常定名为RefreshView。

  一样平常计划者指定元素的巨细,元素自己不必要盘算其巨细,但某些元素多是依据其内容主动设置巨细,因而必要重载盘算元素巨细的函数RefreshSize来主动设置巨细。主动设置巨细大概只是设置元素的宽度或高度,也多是同时设置其宽度和高度。统一个元素,大概在一种形态下不会主动设置巨细,而在别的一种形态下必要主动设置巨细。一切的这些操纵都必要在RefreshSize函数中完成。

  一样平常的计划元素都必要在文档视图中绘制内容,这时候必要重载RefreshView函数,这个函数参数包括了一个System.Drawing.Graphics工具,元素必要利用这个Graphics工具来绘制本人特定的内容,多是绘制文本,图片或其他图形。

  当一切的文档元素都完成了绘制文档相称的接口,则在计划器的调剂下,一个完全的计划文档视图就绘制出来了。而扩大计划器时,若必要指定新显现款式的元素时,必要重载RefreshView和RefreshSize函数来完成新的显现款式,此时扩大的计划器就可以显现新款式的文档视图。

  处置鼠标键盘事务相干接口

  计划器中次要处置鼠标事务,文档基本元素能够界说一些处置鼠标事务的虚函数,称号能够为HandleMouseDown,HandleMouseMove和HandleMouseUp。

  为了便利文档元素处置鼠标坐标,计划器在挪用文档元素的HandleMouse函数时,起首将鼠标光标坐标举行转换,要将鼠标光标在视图地区中的坐标转换为文档元素外部的绝对坐标,即相对元素左上角的绝对坐标。

  计划器要依托鼠标事务来完成计划元素的拖拽操纵以完成交换式计划体验。关于鼠标拖拽操纵典范的使用就是利用8个把持点来编纂元素界限。当一个元素界限是矩形时,会在元素的界限矩形的四个角和四个边的中点上散布8个把持点,当鼠标挪动到这8个点时会修正鼠标光标款式,当鼠标光标在某个把持点上时,用户按下鼠标按键则入手下手举行鼠标拖拽操纵,拖拽时会显现一个虚线绘制的边框,当松开鼠标按键则拖拽操纵停止,此时计划器修正拖拽的元素的矩形界限。

  某些文档元素其实不举行尺度的鼠标拖拽操纵,比方关于容器元素,其外部的鼠标拖拽不挪动工具而是画出一个选择矩形来选择多少个子工具;关于表格元素,它的表格线上的鼠标拖拽操纵是修正表格行的高度和表格列的宽度;而关于线段则是修正端点地位。

  当用户不当心按下鼠标按键,或只是选择某个元素而其实不想举行鼠标拖拽操纵,此时可使用一个参数System.Windows.Forms.SystemInformation.DragSize来判别是不是举行鼠标拖拽。当鼠标按键按下时,计划器就锁定鼠标,若鼠标按键按下后鼠标挪动间隔超越了DragSize的局限时,则暗示用户是想举行鼠标拖拽操纵的,此时入手下手真实的鼠标拖拽操纵。若鼠标按键从按下到松开时鼠标挪动间隔一直没超越DragSize的局限,则暗示用户没有举行鼠标拖拽操纵的企图。如许的判别可让计划器容忍用户的一些误操纵。

  计划器还要处置鼠标双击事务处置,关于某些包括文本的元素,用户双击该元素,则在计划视图中显现个文本输出框来间接编纂工具的文本内容。能够界说一个接口ILabelEditable,当用户双击某个元素,计划器发明该元素完成了ILabelEditable接口,则在计划视图中静态的显现一个文本输出框,然后挪用该接口的成员来间接编纂工具文本内容。

  保护文档工具树

  文档基本元素要界说很多接口来用于保护文档工具树。要界说OwnerDocument属性来指定元素地点的文档工具,要界说Parent属性来指明元素的父节点,界说Items属性来指明该元素的子元素列表。关于容器元素,还要保护它的子元素列表。

  计划文档工具作为文档树的根节点,担当着保护全部工具树的重担,包含文档全体的加载保留,文档全体的绘制,遍历全部工具树布局出口,还要为剧本供应接口。它是会见文档工具树的出口点。

  一些对照基本的文档元素范例

  能够从文档基本元素上派生一些对照基本的文档元素范例。这些对照基本的文档元素范例能够包含:

  ・矩形元素基本范例,范例称号为DesignRectangleElement,计划文档中年夜部分元素的界限是矩形,因而界说矩形元素基本范例作为这些矩形范例的元素的配合基本。矩形元素基本范例完成了利用8个点的把持点来修正元素地位和巨细的才能,鼠标在工具界限只那的鼠标拖拽操纵便可挪动元素地位。别的还界说了内容和界限之间的边距信息。

  ・线段范例,范例称号为DesignLineElement,计划文档某些元素是以线段体例显现的,因而界说线段范例作为这些元素范例的基本类,线段范例界说了两个端点的地位,线段的显现款式,标签文档等信息。别的还重载了鼠标事务,使得用户可使用鼠标拖拽线段的两个端点来修正线段端点的坐标。别的还要重载射中操纵,用于判别某个坐标是不是射中线段工具,若指定点间隔线段的垂直间隔小于某个参数,和点在线段某个端点上的拖拽点中则射中线段,不然没射中。

  ・容器元素范例,范例称号为DesignElementContainer,该元素能够包括多少个子元素,它是从DesignRectangleElement派生的,因而它的界限是矩形。鼠标在容器中的拖拽操纵不是挪动容器,而是静态绘制一个选择矩形,当完成拖拽操纵时,就依据这个选择矩形来设置子元素的选中形态。依据选择矩形来选择子元素有两种体例,一种是,若子元素界限和选择矩形粘边就被选中,另外一种是,若子元素完整在选择矩形外部时才被选中。容器元素在绘制子元素时就实行矩形掩盖操纵后再挪用子元素的RefreshView成员。

  ・带题目容器元素,范例称号为DesignCaptionContainer,该元素派生自容器元素,能够包括多少个子元素,但它顶端有个题目栏,能够显现文本,用户利用鼠标拖拽这个题目栏能够修正元素的地位。别的它还完成了ILabelEditable接口,当用户双击题目栏时能够间接编纂题目栏文本。

  ・文本元素,范例称号为DesignTextElement,良多文档元素只是复杂的显现文本内容,则界说文本元素作为这些复杂显现文本内容的元素的配合基本。它派生自DesignRectangleElement,别的还完成了ILabelEditable接口用于间接编纂文本内容。别的还撑持文本输入角度把持,此时绘制文本时将以元素中央为原点扭转恣意角度举行绘制。文本元素绘制带角度的文本时必要一时修正图形绘制工具Graphics的转换矩阵来设置绘制角度。

  ・加强文本元素,范例称号为DesignTextElementExt,该元素派生自DesignTextElement,对文本输入格局举行了强化,它撑持行间距和字符间距,别的还举行了文本右侧缘的对齐操纵。显现关于年夜段文本时,特别包括中笔墨符和英笔墨符,某些程序没有举行文本右侧缘对齐操纵。比方IE,记事本等,这是由于中笔墨符和英笔墨符宽度纷歧样。每行文本的内容宽度因为中英字符的个数纷歧样,很简单招致文本宽度纷歧样,因而当文本右边缘对齐时,其右侧缘极可能是乱七八糟的。但MSWord显现年夜段文本时它的文本摆布边沿都是对齐的,它经由过程在显现文本时拔出分外的用户难以发觉字符间距来修改文本显现宽度。加强型文本元素就使用了这个道理来完成文本右侧缘对齐。

  ・表格元素,范例称号为DesignTableElement,表格元素是一种庞大的容器元素,它包括表格行(DesignTableRowElement),表格列(DesignTableColumnElemetn)和单位格(DesignTableCellElement)工具,个中单位格能够举行横向兼并和纵向兼并。而表格包括的表格行和单位格也是容器元素,用户不克不及间接修正单位格的巨细地位,而只能调停表格行的高度和表格列的宽度来修正单位格的巨细地位。单位格也是容器元素,因而单位格内能够安排多少个子元素。在良多情形下单位格只是显现复杂的文本内容,因而单位格界说了一些用于显现文本内容的属性,别的完成了ILabelEditable接口来便利间接编纂单位格文本内容。

  ・图片元素,范例称号为DesignImageElement,它是从DesignRectangleElement派生的,用于复杂的显现一个图片。因为图片工具(System.Drawing.Image)利用了未托管资本,因而图片元素完成了System.IDisposable接口。

  ・别的还界说了一些元素,这些元素能够摹拟绘制Windows基本控件,包含文本标签,按钮,单选框,复选框,文本框,列表,以下列表,组合框,进度条和窗体。能够依据这些元从来很简单的摹拟出一个窗体计划器。

  绘制文档视图

  计划器的次要事情之一就是绘制文档视图。其绘制历程通常为:

  ・计划器控件重载它的OnPaint成员或绑定Paint事务。

  ・当操纵体系必要从头绘制计划器控件时会触发它的Paint事务。

  ・计划器取得绘制图形利用的System.Drawing.Graphics工具和一个暗示绘制地区的剪切矩形ClipRectangle,然后将其作为参数挪用文档工具的RefreshView函数。

  ・文档工具举行一个初始化事情,然后遍历工具树布局,找到一切和剪切矩形粘边的文档元素,挪用它们的RefreshView函数,让各个元素绘制各自内容。

  ・当一切事情终了,则文档视图绘制终了。

  计划器绘制文档是碰到一个困难就是闪灼,当用户转动视图和更新视图时,用户界面很简单呈现闪灼,过量的闪灼会对照严峻的影响利用者的利用。关于闪灼的道理我已经写过一篇文章会商了一下(点击检察)。因为计划文档是对照庞大的文档,绘制全部文档视图事情量年夜,绘制工夫长,因而必要接纳各类优化来削减绘制工夫,削减闪灼。

  关于闪灼有一个算是与日俱增的举措就是利用双缓冲手艺。在绘制图形时,起首将图形绘制到一个内存中的BMP图片上,然后将这个BMP图片绘制到用户界面上。这类办法能够最年夜水平的削减闪灼,并且在.NET中利用双缓冲也对照复杂。但我不年夜利用双缓冲手艺,有两个缘故原由:

  ・双缓冲实践上增添了全部绘制文档的事情量,延伸了画图工夫。当用户转动视图时,会形成视图很“极重”的感到,用户界面呼应愚钝。

  ・双缓冲掩饰了程序的不敷的地方。开辟职员能够依据闪灼水平来判别画图操纵是不是必要优化,和优化效果。但双缓冲没落了闪灼,开辟职员也就没有优化画图操纵的急切需求,滋长了开辟职员的怠惰。程序绘制图形时迟缓不胜,而很难从外表看出成绩的大概缘故原由。

  实在能够如许,计划器在开辟时不利用双缓冲,但公布时则利用双缓冲。

  因为计划器接纳直角坐标体例,因而各个元素间存在互相掩盖的干系,当存在年夜面积的掩盖时,绘制文档时必须要针对这类情形举行优化处置来进步绘制文档的速率,削减盘算机屏幕闪灼。针对掩盖征象而举行优化时能够举行矩形掩盖操纵,关于矩形掩盖操纵,自己有另外一篇文章对此举行了申明(点击检察)。计划器绘制某个元素时,起首针对这个元素举行矩形掩盖运算,将运算了局作为RefreshView函数的某个参数来传进,当文档元素内容对照多时,能够依据这个矩形掩盖运算了局来削减绘制量,进步绘制速率。

  计划视图还应供应缩放显现功效,能够缩小计划视图来更分明的显现细节,能够减少计划视图来整体的掌控全部文档。GDI+有个转换矩阵,能够很简单的完成计划视图的缩放显现。但此时一切的鼠标坐标数据都得举行响应的缩放处置。

  计划视图控件

  计划视图控件是计划器在用户界面上的展现接口。它是一个尺度的Windows控件,该控件派生自System.Windows.Form.UserControl。用户利用鼠标和键盘在这个控件内里编纂文档,它重载了OnMouseDown,OnMouseMove和OnMouseUp成员,对鼠标动静举行了一下包装后供计划文档工具利用。重载了OnPaint成员来更新文档视图。重载了OnDoubleClick来举行试图间接编纂文档元素的文本内容。

  当用户设置某个元素为以后元素,则计划视图控件将依据必要来举行转动以便利前元素呈现在可视地区中。若以后元素巨细小于可视地区巨细,则处置对照复杂,只需依据可视地区巨细和元素在视图中的地位便可盘算转动地位。若元素宽度或高度年夜于可视地区的宽度和高度,则必要举行分外的判别,以免转动时产生腾跃。

  鹰眼手艺

  一个好的计划器应该撑持鹰眼手艺,所谓鹰眼,普通的讲就是小舆图,它一样平常安排在程序界面的某个角落,它的面积不年夜,次要功效是让人瞥上一眼就可以大致懂得全部文档的布局,并能经由过程鼠标点击疾速的转动文档。关于鹰眼,自己写过一个文章专门会商了它(点击检察).

  总结

  利用便利的所见即所得的计划器是一个庞大的程序,必要丰厚的相干开辟履历,它触及到图形化,文档工具模子和其他各类编程手艺,是一个多种编程手艺的无机夹杂,一般必要编写数万行的代码才干完成。因而其手艺门坎对照高,一样平常的小公司没有才能完成,即便有些公司有气力开辟,那也要花数月的工夫,有大概影响公司一般的项目开辟。但跟着各类信息体系愈来愈天真,它们必需装备优秀的计划器,如有一个利用便利功效壮大的计划器,则处置这类体系设置是事半功倍的,因而良多开辟职员都不能不面临开辟计划器这个手艺困难。

  有鉴于此,XDesigner软件事情室凭着本身丰厚的计划器开辟履历开辟了XDesignerLib,一个计划器两头件,也就是一个计划器的半制品,这其中间件完成了所见即所得的计划器的全体基本,并供应了十分充实的扩大接口.开辟职员懂得了XDesignerLib今后就能够仅仅编写对照复杂的几千行代码就可以完成一个功效壮大的计划器。借助XDesignerLib,开辟职员不用处置十分烦琐的底层细节,只需懂得XDesignerLib的接口,扩大它就好了。实事上XDesigner事情室已开辟的各类计划器都是基于XDesignerLib的。关于XDesigner软件事情室和XDesignerLib,请会见http://www.xdesigner.cn.无论谁倒了对双方阵营的粉丝们也是有害无益。
若天明 该用户已被删除
沙发
发表于 2015-1-19 05:32:46 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-31 21:59:15 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
蒙在股里 该用户已被删除
地板
发表于 2015-2-7 00:08:05 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-19 03:58:58 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
变相怪杰 该用户已被删除
6#
发表于 2015-3-6 12:37:51 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
admin 该用户已被删除
7#
发表于 2015-3-13 01:07:10 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
谁可相欹 该用户已被删除
8#
发表于 2015-3-13 01:07:12 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
爱飞 该用户已被删除
9#
发表于 2015-3-20 07:52:23 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表