Making Your Mobile Apps Sexy Using the Compact Framework 3.5 Stephen Leverett DotNetConsult.

Post on 17-Dec-2015

215 views 2 download

Transcript of Making Your Mobile Apps Sexy Using the Compact Framework 3.5 Stephen Leverett DotNetConsult.

Making Your Mobile Apps Sexy Using the Compact Framework 3.5

Stephen LeverettDotNetConsult

Compact Framework Controls

Native controls with wrappersFilter unwanted messagesManage events raisedPaint events not availableCustom drawing not available

.NET Compact Framework 3.5: Graphics considerationSupport for drawing primitives

with fill methods: Line, Polygon, Image, etc...

Alpha Blending pixel by pixel of one color

Form and Control objects support CreateGraphics method

Icons with high resolutions supported (not high-color)

.NET Compact Framework 3.5: Performance considerationsOnPaint with a PaintEventArgs

when using an objectDraw graphics to off-screen

bitmapDesign drawing with item

changes determined by cursor position

Basic Drawing & Graphics featuresSet up a Background ImageZoom effectGradient FillDraw Image with TransparencyDraw Image Off-Screen

Set up a Background Image

Add a resource to ProjectSet “Build Action” under

properties to “Embedded Resource”

Generate Resource StreamDraw Image

Assembly asm = Assembly.GetExecutingAssembly();

Bitmap backgroundImage = new

Bitmap(asm.GetManifestResourceStream("BackgroundIMG.Toucan.jpg"));

e.Graphics.DrawImage(backgroundImage, this.ClientRectangle, new Rectangle(0, 0, backgroundImage.Width, backgroundImage.Height), GraphicsUnit.Pixel);

Zoom effectSetup ImageCreate ImageZoom into ImageDraw Normal and Zoom images

void CreateBitmap(){ bmp = new Bitmap(75, 75); Graphics g = Graphics.FromImage(bmp); SolidBrush BlueBrush = new

SolidBrush(Color.Blue); SolidBrush RedBrush = new

SolidBrush(Color.Red); Rectangle OuterRect = new Rectangle(0, 0,

200, 200); g.FillRectangle(BlueBrush, OuterRect); Rectangle InnerRect = new Rectangle(25,

25, 25, 25); g.FillRectangle(RedBrush, InnerRect); g.Dispose();}

private void ZoomIMG() { bmpZoom = new Bitmap(bmp.Width, bmp.Height); Graphics g = Graphics.FromImage(bmpZoom); int new4W = bmp.Width / 4; int new4H = bmp.Height / 4; int new2W = bmp.Width / 2; int new2H = bmp.Height / 2; Rectangle srcRect = new Rectangle(new4W, new4H,

new2W, new2H); Rectangle dstRect = new Rectangle(0, 0,

bmpZoom.Width, bmpZoom.Height); g.DrawImage(bmp, dstRect, srcRect, GraphicsUnit.Pixel); }

protected override void OnPaint(PaintEventArgs e) { e.Graphics.DrawImage(bmp, 0, 0); e.Graphics.DrawImage(bmpZoom, 125, 0); base.OnPaint(e); }

Gradient FillSetup Win32HelperSetup TRIVERTEX and GradientFill

callInitialize GraphicsMake GadientFill callDrawImage

public TRIVERTEX( int x, int y, ushort red, ushort green, ushort blue, ushort alpha)

{ this.x = x; this.y = y; this.Red = (ushort)(red << 8); this.Green = (ushort)(green << 8); this.Blue = (ushort)(blue << 8); this.Alpha = (ushort)(alpha << 8); }public struct GRADIENT_RECT { public uint UpperLeft; public uint LowerRight; public GRADIENT_RECT(uint ul, uint lr) { this.UpperLeft = ul; this.LowerRight = lr; } }

[DllImport("coredll.dll", SetLastError = true, EntryPoint = "GradientFill")]

public extern static bool GradientFill( IntPtr hdc, TRIVERTEX[] pVertex, uint dwNumVertex, GRADIENT_RECT[] pMesh, uint dwNumMesh, uint dwMode);

public const int GRADIENT_FILL_RECT_H = 0x00000000;

public const int GRADIENT_FILL_RECT_V = 0x00000001;

Win32Helper.TRIVERTEX[] tva = new Win32Helper.TRIVERTEX[2]; tva[0] = new Win32Helper.TRIVERTEX(r.X, r.Y, startColor); tva[1] = new Win32Helper.TRIVERTEX(r.Right, r.Bottom, endColor); Win32Helper.GRADIENT_RECT[] gr = new

Win32Helper.GRADIENT_RECT[] { new Win32Helper.GRADIENT_RECT(0, 1)};

// Get the handle from the Graphics object. IntPtr hdc = g.GetHdc();

// PInvoke to GradientFill. bool b; b = Win32Helper.GradientFill( hdc, tva, (uint)tva.Length, gr, (uint)gr.Length, (uint)fillDirection); System.Diagnostics.Debug.Assert(b, string.Format( "GradientFill failed: {0}", System.Runtime.InteropServices.Marshal.GetLastWin32Error()));

Color Topcolor = Color.Red;Color BottomColor = Color.RoyalBlue;

Bitmap bmp = new Bitmap(Width, Height);Graphics g =

System.Drawing.Graphics.FromImage(bmp);

GradientFill.Fill(g, this.ClientRectangle, Topcolor, BottomColor, GradientFill.FillDirection.TopToBottom);

//Draw Graphic Imagee.Graphics.DrawImage(bmp, 0, 0);g.Dispose();bmp.Dispose();

Draw Image with TransparencySetup BitMap and GraphicsFill part of Graphics with

Red(Black background)ImageAttributes color setSetup Image and DrawImage

Bitmap bmp = new Bitmap(200, 200);Graphics g = Graphics.FromImage(bmp);

g.FillEllipse(new SolidBrush(Color.Red), 0, 0, bmp.Width, bmp.Width);

g.Dispose();

ImageAttributes attr = new ImageAttributes();attr.SetColorKey(Color.Black, Color.Black);Rectangle dstRect = new Rectangle(0, 0,

bmp.Width, bmp.Height);

e.Graphics.DrawImage(bmp, dstRect, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, attr);

Draw Image off-screenSetup BitMap and GraphicsFill Graphics Bitmap with RedCreate white rectangle with

Green CircleDraw the Bitmap onto the screen

Bitmap bmp = new Bitmap(200, 200); SolidBrush GreenBrush = new

SolidBrush(Color.DarkSeaGreen);Pen WhitePen = new Pen(Color.White, 3);

Graphics g = Graphics.FromImage(bmp);g.FillRectangle(new SolidBrush(Color.Red), 0, 0, bmp.Width, bmp.Height);

Rectangle rect = new Rectangle(x, y, 20, 20);g.DrawRectangle(WhitePen, rect);g.FillEllipse(GreenBrush, rect);

e.Graphics.DrawImage(bmp, 0, 0, ClientRectangle, GraphicsUnit.Pixel);

g.Dispose();

Removing the Title BarSet the FormBorderStyle to noneMaximize FormWindowState

Example:this.FormBorderStyle =

FormBorderStyle.None;this.WindowState=FormWindowState.M

aximized;

Removing Button BarDelete MainMenu from Form

Behaviour Variations?Compact Framework changes

from1.0/2.0 to 3.5?

Check out article:

.NET Compact Framework 3.5 Run-Time Breaking Changes

Articles: Graphics and Drawing in the .NET Compact Frameworkhttp://msdn.microsoft.com/en-us/library/hf85w92t.aspx

How to: Set a Background Image on a Formhttp://msdn.microsoft.com/en-us/library/ms172529.aspx

How to: Create a Zoom Effecthttp://msdn.microsoft.com/en-us/library/ms229648.aspx

How to: Display a Gradient Fillhttp://msdn.microsoft.com/en-us/library/ms229655.aspx

How to: Draw Images with Transparencyhttp://msdn.microsoft.com/en-us/library/ms172507.aspx

How to: Draw Images Off-Screenhttp://msdn.microsoft.com/en-us/library/ms172506.aspx

Articles(cont.): How to: Handle Orientation and Resolution Changeshttp://msdn.microsoft.com/en-us/library/ms229649.aspx

Creating Compelling and Attractive UI’s Webcast http://

msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&EventID=1032404297&CountryCode=US

Code for the UI Webcast’shttp://code.msdn.microsoft.com/uiframework

Building Graphically Advanced Applicationshttp://expression.microsoft.com/en-us/dd279543.aspx

.NET Compact Framework 3.5 Run-Time Breaking Changeshttp://msdn.microsoft.com/en-us/netframework/bb986636.aspx