• No results found

WPF vs Windows Forms

N/A
N/A
Protected

Academic year: 2021

Share "WPF vs Windows Forms"

Copied!
30
0
0

Loading.... (view fulltext now)

Full text

(1)

Grafika 2D

(2)

WPF vs Windows Forms

WPF vs Windows Forms

immediate-mode graphics :

immediate-mode graphics :

programista dba o odrysowywanie

programista dba o odrysowywanie

elementów, które tego wymagają

elementów, które tego wymagają

retained-mode graphics :

retained-mode graphics :

wszystko co zostanie narysowane jest

wszystko co zostanie narysowane jest

automatycznie zachowywane i odświeżane

(3)

Trzy sposoby

Trzy sposoby

● DrawingDrawing

● VisualVisual

(4)

Drawing

Drawing

● GeometryDrawingGeometryDrawing ● ImageDrawingImageDrawing ● VideoDrawingVideoDrawing ● GlyphRunDrawingGlyphRunDrawing ● DrawingGroupDrawingGroup
(5)

GeometryDrawing

GeometryDrawing

<GeometryDrawing

<GeometryDrawing BrushBrush = "Orange"> = "Orange"> <GeometryDrawing.

<GeometryDrawing.PenPen>>

<Pen Brush = "Black" Thickness = "10"/>

<Pen Brush = "Black" Thickness = "10"/>

</GeometryDrawing.Pen>

</GeometryDrawing.Pen>

<GeometryDrawing.

<GeometryDrawing.GeometryGeometry>> <EllipseGeometry

<EllipseGeometry RadiusX = "100" RadiusX = "100"

RadiusY = "50"/> RadiusY = "50"/> </GeometryDrawing.Geometry> </GeometryDrawing.Geometry> </GeometryDrawing> </GeometryDrawing>

(6)

Wyświetlanie Drawing

Wyświetlanie Drawing

● DrawingImageDrawingImage

● DrawingBrushDrawingBrush

(7)

GeometryDrawing

GeometryDrawing

<Image> <Image> <Image.Source> <Image.Source> <DrawingImage> <DrawingImage> <DrawingImage.Drawing> <DrawingImage.Drawing> <GeometryDrawing Brush=”Orange”> <GeometryDrawing Brush=”Orange”> . . . . . . </GeometryDrawing> </GeometryDrawing> </DrawingImage.Drawing> </DrawingImage.Drawing> </DrawingImage> </DrawingImage> </Image.Source> </Image.Source> </Image> </Image>
(8)

Geometry

Geometry

● RectangleGeometryRectangleGeometry

( Rect, RadiusX, RadiusY ) ( Rect, RadiusX, RadiusY )

● EllipseGeometryEllipseGeometry

( Center, RadiusX, RadiusY ) ( Center, RadiusX, RadiusY )

● LineGeometryLineGeometry

( StartPoint, EndPoint ) ( StartPoint, EndPoint )

(9)

PathGeometry.Figures

PathGeometry.Figures

(PathFigure)

(PathFigure)

● LineSegmentLineSegment ● PolyLineSegmentPolyLineSegment ● ArcSegmentArcSegment ● BezierSegmentBezierSegment ● PolyBezierSegmentPolyBezierSegment ● QuadraticBezierSegmentQuadraticBezierSegment ● PolyQuadraticBezierSegmentPolyQuadraticBezierSegment
(10)

PathFigure

PathFigure

<GeometryDrawing> <GeometryDrawing> <GeometryDrawing.Pen> <GeometryDrawing.Pen>

<Pen Brush = "Black" Thickness = "10" />

<Pen Brush = "Black" Thickness = "10" />

</GeometryDrawing.Pen> </GeometryDrawing.Pen> <GeometryDrawing.Geometry> <GeometryDrawing.Geometry> <PathGeometry> <PathGeometry> <

<PathFigure PathFigure StartPoint = "0, 0"StartPoint = "0, 0">>

<LineSegment Point = "0, 100" /> <LineSegment Point = "0, 100" /> <LineSegment Point = "100, 100" /> <LineSegment Point = "100, 100" /> </PathFigure> </PathFigure> . . . . . .

(11)

PathFigure

PathFigure

● StartPointStartPoint ● IsClosedIsClosed ● FillRuleFillRule ● EvenOddEvenOdd ● NonZeroNonZero
(12)

GeometryGroup

GeometryGroup

<GeometryDrawing ... > <GeometryDrawing ... > <GeometryDrawing.Geometry> <GeometryDrawing.Geometry> < <GeometryGroupGeometryGroup>> <PathGeometry> <PathGeometry> ... ... </PathGeometry> </PathGeometry> <RectangleGeometry ... /> <RectangleGeometry ... /> <EllipseGeometry ... /> <EllipseGeometry ... /> </GeometryGroup> </GeometryGroup> ... ...
(13)

CombinedGeometry

CombinedGeometry

● GeometryCombineModeGeometryCombineMode ● UnionUnion ● IntersectIntersect ● XorXor ● ExcludeExclude ● Geometry1Geometry1 ● Geometry2Geometry2
(14)

GeometryConverter

GeometryConverter

<GeometryDrawing <GeometryDrawing Geometry = "M 0,0 L 0,100 L 100,100 Z"> Geometry = "M 0,0 L 0,100 L 100,100 Z"> <GeometryDrawing.Pen> <GeometryDrawing.Pen>

<Pen Brush = "Black" Thickness = "10" />

<Pen Brush = "Black" Thickness = "10" />

</GeometryDrawing.Pen>

</GeometryDrawing.Pen>

</GeometryDrawing>

(15)

Pen

Pen

● StartLineCap, EndLineCap, DashCapStartLineCap, EndLineCap, DashCap

( Flat, Square, Round, Triangle ) ( Flat, Square, Round, Triangle )

● LineJoinLineJoin

( Miter, Round, Bevel ) ( Miter, Round, Bevel )

● DashStyleDashStyle

( Solid, Dash, Dot, DashDot, DashDotDot ) ( Solid, Dash, Dot, DashDot, DashDotDot )

(16)

DrawingVisual

DrawingVisual

DrawingGroup someDrawing = DrawingGroup someDrawing = FindResource ("someDrawing") FindResource ("someDrawing") as DrawingGroup; as DrawingGroup;

DrawingVisual someVisual = new DrawingVisual ( );

DrawingVisual someVisual = new DrawingVisual ( );

using (DrawingContext dc = using (DrawingContext dc = someVisual.RenderOpen ( )) someVisual.RenderOpen ( )) { { dc.DrawDrawing (someDrawing); dc.DrawDrawing (someDrawing); } }

(17)

DrawingVisual c.d.

DrawingVisual c.d.

using (DrawingContext dc = using (DrawingContext dc = someVisual.RenderOpen ( )) someVisual.RenderOpen ( )) { { dc.DrawDrawing (firstDrawing); dc.DrawDrawing (firstDrawing); dc.DrawDrawing (secondDrawing); dc.DrawDrawing (secondDrawing);

dc.DrawGeometry ( Brushes.Blue, null,

dc.DrawGeometry ( Brushes.Blue, null,

Geometry.Parse Geometry.Parse ( ... ) ); ( ... ) ); dc.DrawEllipse ( ... ); dc.DrawEllipse ( ... ); dc.DrawLine ( ... ); dc.DrawLine ( ... ); } }

(18)

Wyświetlanie DrawingVisual

Wyświetlanie DrawingVisual

AddVisualChild(someVisual); AddVisualChild(someVisual); AddLogicalChild(someVisual); AddLogicalChild(someVisual); } }

protected override int VisualChildrenCount

protected override int VisualChildrenCount

{ get { return 1; } }

{ get { return 1; } }

protected override Visual GetVisualChild (int index)

protected override Visual GetVisualChild (int index)

{ { return someVisual; return someVisual; } }

(19)

Visual Hit Testing

Visual Hit Testing

HitTestResult result =

HitTestResult result =

VisualTreeHelper.HitTest (this, point);

VisualTreeHelper.HitTest (this, point);

if (result.VisualHit == someVisual)

if (result.VisualHit == someVisual)

{

{

// Nasz obiekt someVisual zawiera punkt "point"

// Nasz obiekt someVisual zawiera punkt "point"

}

(20)

Visual Hit Testing c.d.

Visual Hit Testing c.d.

VisualTreeHelper.HitTest(this, null,

VisualTreeHelper.HitTest(this, null,

new HitTestResultCallback (HitCbk),

new HitTestResultCallback (HitCbk),

new PointHitTestParameters (point));

new PointHitTestParameters (point));

}

}

public HitTestResultBehavior HitCbk(HitTestResult r)

public HitTestResultBehavior HitCbk(HitTestResult r)

{

{

DrawingVisual dv = r.VisualHit as DrawingVisual;

DrawingVisual dv = r.VisualHit as DrawingVisual;

...

... // dv zawiera "trafiony" obiekt DrawingVisual// dv zawiera "trafiony" obiekt DrawingVisual return HitTestResultBehavior.Continue;

return HitTestResultBehavior.Continue;

}

(21)

Shape

Shape

● RectangleRectangle ● EllipseEllipse ● LineLine ● PolylinePolyline ● PolygonPolygon ● PathPath
(22)

Shape c.d.

Shape c.d.

<StackPanel>

<StackPanel>

<

<RectangleRectangle Width = "200" Height = "100" Width = "200" Height = "100" Fill = "Orange" Stroke = "Black"

Fill = "Orange" Stroke = "Black"

StrokeThickness = "10" Margin = "4"

StrokeThickness = "10" Margin = "4"

RadiusX = "10" RadiusY = "30" />

RadiusX = "10" RadiusY = "30" />

<

<EllipseEllipse Width="20" Height="10" Fill="Orange"/> Width="20" Height="10" Fill="Orange"/>

< <LineLine X1 = "0" Y1 = "0" X2 = "10" Y2 = "10" X1 = "0" Y1 = "0" X2 = "10" Y2 = "10" Stroke = "Red" /> Stroke = "Red" /> </StackPanel> </StackPanel>

(23)

Shape c.d.

Shape c.d.

<StackPanel>

<StackPanel>

<

<PolylinePolyline Points = "0, 0 100, 100 200, 0" Points = "0, 0 100, 100 200, 0" Stroke = "Black" />

Stroke = "Black" />

<

<PolygonPolygon Points = "0, 0 100, 100 200, 0" Points = "0, 0 100, 100 200, 0" Stroke = "Black" />

Stroke = "Black" />

</StackPanel>

(24)

Shape c.d.

Shape c.d.

<StackPanel>

<StackPanel>

<

<PathPath Fill = "Orange" Stroke = "Black"> Fill = "Orange" Stroke = "Black"> <Path.Data>

<Path.Data>

<PathGeometry>

<PathGeometry>

<PathFigure IsClosed = "True">

<PathFigure IsClosed = "True">

<LineSegment Point = "0,100" /> <LineSegment Point = "0,100" /> <LineSegment Point = "100,100" /> <LineSegment Point = "100,100" /> </PathFigure> </PathFigure> . . . . . .

(25)

Brush

Brush

● SolidColorBrushSolidColorBrush ● LinearGradientBrushLinearGradientBrush ● RadialGradientBrushRadialGradientBrush ● DrawingBrushDrawingBrush ● ImageBrushImageBrush ● VisualBrushVisualBrush ● BitmapCacheBrushBitmapCacheBrush
(26)

LinearGradientBrush

LinearGradientBrush

<LinearGradientBrush

<LinearGradientBrush StartPoint = "0,0" StartPoint = "0,0" EndPoint = "1,1">

EndPoint = "1,1">

<GradientStop Offset = "0" Color = "Red"/>

<GradientStop Offset = "0" Color = "Red"/>

<GradientStop Offset = "0.2" Color = "Orange"/>

<GradientStop Offset = "0.2" Color = "Orange"/>

<GradientStop Offset = "0.4" Color = "Yellow"/>

<GradientStop Offset = "0.4" Color = "Yellow"/>

<GradientStop Offset = "0.6" Color = "Green"/>

<GradientStop Offset = "0.6" Color = "Green"/>

<GradientStop Offset = "0.8" Color = "Blue"/>

<GradientStop Offset = "0.8" Color = "Blue"/>

<GradientStop Offset = "1" Color = "Purple"/>

<GradientStop Offset = "1" Color = "Purple"/>

</LinearGradientBrush>

(27)

RadialGradientBrush

RadialGradientBrush

<RadialGradientBrush

<RadialGradientBrush Center = "0.5,0.5" Center = "0.5,0.5"

RadiusX = "0.5" RadiusY = "0.5">

RadiusX = "0.5" RadiusY = "0.5">

<GradientStop Offset = "0" Color="#990000FF"/>

<GradientStop Offset = "0" Color="#990000FF"/>

<GradientStop Offset="0.5" Color="#550000FF"/>

<GradientStop Offset="0.5" Color="#550000FF"/>

<GradientStop Offset = "1" Color="#000000FF"/>

<GradientStop Offset = "1" Color="#000000FF"/>

</RadialGradientBrush>

(28)

TileBrush

TileBrush

● DrawingBrushDrawingBrush

● ImageBrushImageBrush

(29)

TileBrush

TileBrush

● Stretch (None, Fill, Uniform, UniformToFill)Stretch (None, Fill, Uniform, UniformToFill)

● TileMode (None, Tile, FlipXY, FlipX, FlipY)TileMode (None, Tile, FlipXY, FlipX, FlipY)

● ViewportViewport

(30)

Effect

Effect

● DropShadowEffectDropShadowEffect

● BlurEffectBlurEffect

References

Related documents

s-process p-process Mass known Half-life known

In memory of Harold Taub, beloved husband of Paula Taub by: Karen &amp; Charles Rosen.. Honouring Maria Belenkova-Buford on her marriage by: Karen &amp;

If Sudan wants to compete in the international meat market it will compete with countries that are producing at the lowest cost and high quality. For example Australia

Plant survival of globally engaged firms, such as Swedish MNEs and exporting non- MNEs, seems to be unaffected by increased foreign presence, whereas there appears to be a

“ the seven words of our LORD on

Volume (2018), Issue 1 Spring 2018 Wildlife Sightings Newsletter of the Iowa Chapter of The Wildlife Society. Make TWS Journals Your Publishing Choice

Advantage: Tungsten carbide, TSP, and diamond enhanced inserts provide extra protection to the gauge. Benefit: In-gauge hole and longer bit life;

To address these questions, the following goals were set: (a) to reproduce field explosions pertaining to primary blast injury as accurate as possible in a controlled