仓酷云

标题: ASP.NET网页编程之ASP.NET2.0中完成图象转换过滤效果 [打印本页]

作者: 变相怪杰    时间: 2015-1-16 22:46
标题: ASP.NET网页编程之ASP.NET2.0中完成图象转换过滤效果
可怜的程序员,还是逃不出移植的命运!asp.net|转换<P>  本文形貌一种创立定制Web控件的简单办法,并把该控件利用于一个ASP.NET2.0web页面中显现微软DirectX图象转换过滤效果。

  1、简介

  本文形貌一种创立定制web控件并使用于一个ASP.NET2.0web页面中显现微软DirectX图象转换过滤效果的简单的办法。文中包含一个具有11个分歧控件的类库,每个控件分离展现微软DirectX图象转换过滤效果的某些方面。在这11个控件中,5个是页面过渡效果控件,别的的6个是用于加强文本表面的过滤效果控件。

  在这6个用于加强文本表面的过滤效果控件中,每个被完成为一个容器控件。这将同意用户大概间接把文本键进到该容器,或把一个标签放到该控件中而且把响应效果使用到这个标签上。选择利用一个标签控件的目标是为了供应一种简单的基于尺度HTML的办法来完成调剂巨细、居中安排和格局化文本。

  剩下的5个控件用于在一个web页面中增加页面过渡效果而不必编写任何分外的HTML或VB代码。为了利用这些控件,用户仅必要把它们拖动到表单上。但是,这些控件没有响应的可视化组件,只管页面可以被显现到扫瞄器中;当用户分开页面时,响应的过渡效果用于翻开下一个页面。

  响应于本文的示例工程中包括了一个复杂的网站,含有单个default.aspx页面;该页面逐一展现下面的6个文本加强控件和一个页面过渡效果控件。

  注重本文中使用于演示工程和控件库的办法仅合用于Internetexplorer,并没有针对别的扫瞄器范例供应撑持。假如你在一家企业内网中事情而且你可以确保一切的用户都可以存取Internetexplorer,那末这个控件集和这里的办法大概对你很有效。假如你公然地公布这些控件,那末,利用一个非Internetexplorer扫瞄器冲浪的用户仍旧可以读取响应的文本可是该效果将不存在。假如你的确想举行公然公布,那末你能够起首反省用户的扫瞄器而且假如它不是IE的话,你应当倡议他们最好利用IE来寓目该站点。



.在该演示工程中的过滤效果


  2、入手下手

  起首,解压源码中包含的类库和演示工程。在反省响应的内容时,你将看到在一个计划中有两个工程。工程DxFilterControls是一个类库,它包括后面提到的11个控件。工程DxFilterTestSite是演示网站,这些控件可以显现于其上,而且能够在单个default.aspxweb页面中寓目。

  在DX过滤控件工程中,有11个自力的控件:

1.CCBlurredLabel
2.CCDropShadow
3.CCEmboss
4.CCEngrave
5.CCGlowingText
6.CCGradient
7.CCPageTransition_Iris
8.CCPageTransition_Pixelate
9.CCPageTransition_RadialWipe
10.CCPageTransition_GradientWipe
11.CCPageTransition_Wheel
  我已提到,前6个控件用于加强文本表面(经由过程一个微软DirectX过滤使用程序完成)。这些控件中的每个都被机关为一个容器,而且任何间接放进容器或标签中的文本城市具有响应的过滤效果,只需它可以被天生到一个微软Internetexplorer扫瞄器。

  前5个控件专门用于为容器内容供应一些文本改善过滤。第6个控件(CCGradient)仅是一个面板,它具有一个突变背景而且它其实不实践改动或间接影响在该容器中的文本。

  第7到第11个控件是页面过渡效果控件。你能够把单个页面过渡控件拖动到一个表单而且设置它的属性(个中,很多属性不必设置)。了局,当用户加入以后页面时,要翻开的下一个页面将被利用指定的效果翻开。固然在这个实例中,我利用这些控件来创建一种过渡效果(当过渡到一个新的页面时),可是,这些过渡效果能够被设置以便利加载容器页面时挪用该效果,乃至能够把这些过渡效果利用于单个页面内来完成利用一个新图象取代另外一个图象的效果。



:像素化页面过渡效果


  别的,这并非一组非常庞大的控件,可是我以为它们已足已可以展现经由过程DirectX可以获得甚么样的过滤效果。你能够参考网站上的有关微软文档来切磋别的过滤效果。
<P>  3、文本加强过滤效果控件

  包括在示例控件库中的下面6个文本改善效果控件中的每个基础上都是以不异的格局创立。在此,我们不想逐一形貌这些控件,而只形貌一下CCEmboss控件。该CCEmboss控件承继自System.Web.UI.WebControl;我已把对System.Design的援用增加到基础web控件上,而且增加了一个import语句以便在工程中包含System.Web.UI.Design库。这类增加关于创建一些计划时候撑持元素(以便使该控件在计划时候更容易于利用)是需要的。该代码被分为三个自力的地区:Declarations,Properties和Rendering。上面,让我们看一下该类界说的入手下手:

ImportsSystem
ImportsSystem.Collections.Generic
ImportsSystem.ComponentModel
ImportsSystem.Text
ImportsSystem.Web
ImportsSystem.Web.UI
ImportsSystem.Web.UI.Design
ImportsSystem.Web.UI.WebControls
<Designer(GetType(EmbossedLabelDesigner))>_
<ParseChildren(False)>_
PublicClassCCEmbossInheritsWebControl
  注重,在import语句后,属性数据显现该类将利用一个包括在EmbossedLabelDesigner类中的定制计划器。前面,我们将形貌这个计划器,它卖力为该控件供应某种计划时候撑持。还要注重,已增加了ParseChildren属性而且被设置为false。这是为了避免页面剖析器剖析该控件的内容,由于该控件是一个容器控件而且它的内容不属于谁人控件一部分。

  Declarations地区跟从厥后并且很复杂;它包括几个private型成员变量用于存储用户对这个控件的选择信息。有关这个过滤效果,你能够参考一下微软文档来断定是不是另有任何别的必要切磋的属性。

#Region"Declarations"
PrivatemEnabledAsBoolean
PrivatemBiasAsSingle
#EndRegion
  在此,mEnabled属性是一个布尔值,它将被传送到过滤效果中,而且它刚好能完成你但愿的效果;它可以启动或停用该效果。这里的mBias用于决意事务的局限。我信任微软文档在这个成绩上显现,0.7是典范的而且是针对这类效果的缺省值。

  接上去是Properties地区,它的内容限于对private型成员变量的内容供应大众存取。实在古代码大抵以下:

#Region"Properties"
<Category("EmbossedLabel")>_
<Browsable(True)>_
<Description("Enableordisplaytheembossedeffect.")>_
PublicPropertyEmbossEnabled()AsBoolean
Get
 EnsureChildControls()
 ReturnmEnabled
EndGet
Set(ByValvalueAsBoolean)
 EnsureChildControls()
 mEnabled=value
EndSet
EndProperty
<Category("EmbossedLabel")>_
<Browsable(True)>_
<Description("Setthebiasfortheembossedeffect(typically0.7).")>_
PublicPropertyBias()AsSingle
Get
 EnsureChildControls()
 ReturnmBias
EndGet
Set(ByValvalueAsSingle)
 EnsureChildControls()
 mBias=value
EndSet
EndProperty
#EndRegion
  最初一部分是Rendering地区。它包括在运转时候激该死效果的需要代码;其代码大抵以下所示:

#Region"Rendering"
ProtectedOverridesSubAddAttributesToRender(ByValwriterAs
HtmlTextWriter)
 writer.AddStyleAttribute(HtmlTextWriterStyle.Filter,_
"progid:DXImageTransform.Microsoft.Emboss(bias="&Bias.ToString()&_
",enabled="&EmbossEnabled.ToString()&");width:"&
Width.Value.ToString()&"px")
 MyBase.AddAttributesToRender(writer)
EndSub
#EndRegion
EndClass
  注重,在此我们重载了AddAttributesToRender子例程,而且利用HtmlTextWriter来增加一个style属性。该属性响应于DirectX过滤器。你还可以看到,这个较早表露的属性被传送给在该过滤器界说内的这个子例程。这是在运转时候把过滤效果增加到容器的地位。

  这一节前面是EmbossedLabelDesigner类的界说。这个类能够被写进一个独自的类文件中;但是我更喜好这类办法,由于它使计划代码及响应方针统统都那末明晰。这部分代码为该控件供应计划时候撑持:

PublicClassEmbossedLabelDesigner
InheritsContainerControlDesigner
ProtectedOverridesSubAddDesignTimeCssAttributes(ByValstyleAttributes
AsSystem.Collections.IDictionary)
 DimembossLblAsCCEmboss=CType(Me.Component,CCEmboss)
 styleAttributes.Add("filter","progid:DXImageTransform.Microsoft.Emboss(bias="&
embossLbl.Bias.ToString()&",enabled="&
embossLbl.Enabled.ToString()&");width:"&
embossLbl.Width.Value.ToString()&"px")
 MyBase.AddDesignTimeCssAttributes(styleAttributes)
EndSub
EndClass
  如你所见,你基础上在该控件上增加了与在运转时候一样的过滤效果,以便你可以看到该过滤的不异的可视化效果;但是,你如今利用的是表单计划器。这一点很好地归结了这个中每一个控件的事情体例,只管你会注重到在表单的别的属性和办法中也存在一些巨大区分。
<P>  4、页面过渡效果控件

  这一节,象前一节一样,我们将仅会商5个页面过渡效果控件之一(由于它们之间具有极年夜的类似性)。我将会商突变擦除过渡效果控件;请参考本文供应的示例代码来进一步懂得这个控件与别的控件之间的区分。

  该突变擦除页面过渡控件(CCPageTransitition_GradientWipe)以一种与文本改善控件类似的体例入手下手。完成代码被分别成三个次要的地区:Declarations,Properties和Rendering。

  该类声明部分看起来以下所示:

ImportsSystem
ImportsSystem.Collections.Generic
ImportsSystem.ComponentModel
ImportsSystem.Text
ImportsSystem.Web
ImportsSystem.Web.UI
ImportsSystem.Web.UI.WebControls
<summary>
过渡效果(仅合用于InternetExplorer)
把这个控件拖动到一个页面上;当这个页面被加入时,下一个页面将会经由过程过渡
效果(GradientWipe)举行显现
</summary>
<remarks></remarks>
PublicClassCCPageTransitition_GradientWipe
InheritsWebControl
PrivateSubCCPageTransitition_GradientWipe_Init(ByValsenderAsObject,
ByValeAsSystem.EventArgs)HandlesMe.Init
 Me.Width=20
 Me.Height=20
EndSub
  你会注重到,我们没有把System.Web.UI.Design导进到这个类中,由于关于这个控件来讲,不存在大概的计划时候可视化内容。你大概还注重到,该控件的初始化用来把该控件的高度和宽度设置为各自20个像素。这仅在计划时候在页面的表单(一个空框)上创立一些唆使时才必要。这个框在运转时候不会呈现在web表单上。

  在类初始化以后,我增加了上面的Declarations地区。这个地区用于存储该类中的每个private型成员变量。这个地区的声明看起来以下所示:

#Region"Declarations"
PrivatemDurationAsSingle=1
#EndRegion
  你能够看出,该类中只利用了一个公有成员变量。在Declarations地区前面,随着的是Properties地区;它看上往以下所示:

#Region"Properties"
<Category("GradientWipeTransition")>_
<Browsable(True)>_
<Description("Settheeffectduration(typically1or2)")>_
PublicPropertyTransitionDuration()AsSingle
 Get
  ReturnmDuration
 EndGet
 Set(ByValvalueAsSingle)
  mDuration=value
 EndSet
EndProperty
#EndRegion
  这个属性用于设置产生页面过渡效果的工夫长度。上面,我们来看一下天生(redering)地区块的代码:

#Region"Rendering"
ProtectedOverridesSubRenderContents(ByValwriterAsSystem.Web.UI.HtmlTextWriter)
 Try
  DimsbAsNewStringBuilder
  sb.Append("<metahttp-equiv=Page-Exit")
  sb.Append("content=progid:DXImageTransform._
Microsoft.gradientWipe(duration="&TransitionDuration.ToString()
&")/>")
  writer.RenderBeginTag(HtmlTextWriterTag.Div)
  writer.Write(sb.ToString())
  writer.RenderEndTag()
 CatchexAsException
  writer.RenderBeginTag(HtmlTextWriterTag.Div)
  writer.Write("GradientWipeTransitionControl")
  writer.RenderEndTag()
 EndTry
EndSub
#EndRegion
EndClass
  这部分代码相称间接,RenderContents子例程被重载,新的内容被包含到一个try-catch块内。只管我没有处置任何毛病(在呈现毛病的情形下),我只把字符串"GradientWipeTransitionControl"写到一个div中,作为一个可安排于此的控件的占位符。

  在该try块内的代码仅利用一个字符串构建器来格局化我们想在运转时候间接放到该web页面的源中的文本。该字符串机关器中包括的代码用于创建哀求,从而把页面exit事务与页面过滤效果加以联系关系。你大概还注重到,duration属性被传送到字符串机关器用于设置过滤器利用的duration参数的值。

  在设置该字符串机关器以后,该字符串机关器的内容被写到页面上。不管什么时候该示例类库中的这个或任何别的页面过渡控件被增加到一个页面,页面加入显现出一样的属性;了局是,不管什么时候用户分开该页面,下一个页面都将利用该过渡效果显现。

  5、结论

  就此停止吧!实在,我还倡议你研讨一下别的的控件并逐一在测试网站中举行实验。还存在别的一些过滤效果和页面过渡可用,我想你必定但愿进一步扩大这个库;一样,另有别的一些有关过滤的属性必要进一步会商。最初,祝你编程兴奋!完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。
作者: 飘飘悠悠    时间: 2015-1-19 23:22
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
作者: 金色的骷髅    时间: 2015-1-26 20:01
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
作者: 愤怒的大鸟    时间: 2015-2-4 20:23
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
作者: 小女巫    时间: 2015-2-10 06:58
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
作者: 分手快乐    时间: 2015-3-10 11:26
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者: 若相依    时间: 2015-3-17 06:33
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2