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
© Copyright 2025