|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可怜的程序员,还是逃不出移植的命运!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++留一个地位。 |
|