Compact Framework Graphics Presentation

advertisement
Making Your Mobile Apps Sexy
Using the Compact Framework 3.5
Stephen Leverett
DotNetConsult
Compact Framework Controls
Native controls with wrappers
 Filter unwanted messages
 Manage events raised
 Paint events not available
 Custom drawing not available

.NET Compact Framework 3.5:
Graphics consideration
Support 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 considerations
OnPaint with a PaintEventArgs when
using an object
 Draw graphics to off-screen bitmap
 Design drawing with item changes
determined by cursor position

Basic Drawing & Graphics features
Set up a Background Image
 Zoom effect
 Gradient Fill
 Draw Image with Transparency
 Draw Image Off-Screen

Set up a Background Image
Add a resource to Project
 Set “Build Action” under properties to
“Embedded Resource”
 Generate Resource Stream
 Draw Image

Assembly asm = Assembly.GetExecutingAssembly();
Bitmap backgroundImage = new
Bitmap(asm.GetManifestResourceStream("BackgroundI
MG.Toucan.jpg"));
e.Graphics.DrawImage(backgroundImage,
this.ClientRectangle, new Rectangle(0, 0,
backgroundImage.Width, backgroundImage.Height),
GraphicsUnit.Pixel);
Zoom effect
Setup Image
 Create Image
 Zoom into Image
 Draw 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 Fill
Setup Win32Helper
 Setup TRIVERTEX and GradientFill call
 Initialize Graphics
 Make GadientFill call
 DrawImage

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 Image
e.Graphics.DrawImage(bmp, 0, 0);
g.Dispose();
bmp.Dispose();
Draw Image with Transparency
Setup BitMap and Graphics
 Fill part of Graphics with Red(Black
background)
 ImageAttributes color set
 Setup 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-screen
Setup BitMap and Graphics
 Fill Graphics Bitmap with Red
 Create white rectangle with Green Circle
 Draw 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 Bar
Set the FormBorderStyle to none
 Maximize FormWindowState


Example:
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState=FormWindowState.Maximized;
Removing Button Bar

Delete 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 Framework
http://msdn.microsoft.com/en-us/library/hf85w92t.aspx

How to: Set a Background Image on a Form
http://msdn.microsoft.com/en-us/library/ms172529.aspx

How to: Create a Zoom Effect
http://msdn.microsoft.com/en-us/library/ms229648.aspx

How to: Display a Gradient Fill
http://msdn.microsoft.com/en-us/library/ms229655.aspx

How to: Draw Images with Transparency
http://msdn.microsoft.com/en-us/library/ms172507.aspx

How to: Draw Images Off-Screen
http://msdn.microsoft.com/en-us/library/ms172506.aspx

Articles(cont.):
How to: Handle Orientation and Resolution Changes
http://msdn.microsoft.com/en-us/library/ms229649.aspx

Creating Compelling and Attractive UI’s Webcast
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?cultur
e=en-US&EventID=1032404297&CountryCode=US

Code for the UI Webcast’s
http://code.msdn.microsoft.com/uiframework

Building Graphically Advanced Applications
http://expression.microsoft.com/en-us/dd279543.aspx

.NET Compact Framework 3.5 Run-Time Breaking Changes
http://msdn.microsoft.com/en-us/netframework/bb986636.aspx

Download