![]() |
Platforms, Frameworks & Libraries »
Mobile Development »
User Interface
Advanced
License: The GNU General Public License (GPL)
Windows Mobile - Attractive UI Part-IBy Atanu MandalWindows Mobile - Attractive UI (Description about AlphaMobilecontrols) |
C#, .NET CF, Mobile, Architect, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
AlphaMobileControls with some additional functionality plus a set of new controls) This article describes how to develop a mobile application with .NET CF having features like background transparency. There is one set of controls created by Rémy Baudet available at AlphaMobileControls. These controls offer background transparent images, image buttons and labels. I have added the following items to the library provided by alphamobilecontrols:
AlphaButton AlphaListBox AlphaImage control so that image can stretch itself as per size of the control In Part I, I shall describe details about the existing AlphaMobileControls and then in the next part, we will discuss about building controls on top of AlphaMobileControls:
Mobile thick client applications are getting more and more popular every day. When I started developing a client application, I did not have much knowledge about .NET Compact Framework. I found that CF class library controls are not sufficient for creating smart looking UIs. Then I tried a number of third party controls - most of them were either too heavy to use in handheld devices or they are very error prone (specifically memory leakage was the common problem of these third party controls). Then I came to know about AlphaMobileControls developed by Rémy Baudet. But, they did not have all the features that I wanted, i.e. a key navigable button control and a list control to display list of items.
AlphaControl has been derived from control base class and Alpha button derives from alpha control.
public class AlphaControl : Control
public class AlphaButton : AlphaControl
Alpha controls should be placed over an alpha container class - either alphaform or alphapanel. This container classes contain the main trick of transparency. It has a paint method which in turn fires the draw method of all containing alpha controls:
/// <summary>
/// Handles the Paint event, it is where the magic happens :-)
/// </summary>
public void OnPaint(PaintEventArgs e)
{
if (_backBuffer != null)
{
// We need a Graphics object on the buffer to get an HDC
using (Graphics gxBuffer = Graphics.FromImage(_backBuffer))
{
// Since we nop'd OnPaintBackground, take care of it here
gxBuffer.Clear(_control.BackColor);
Region gxClipBounds = new Region(Rectangle.Ceiling(gxBuffer.ClipBounds));
// Iterates the child control list in reverse order
// to respect the Z-order
for (int i = _control.Controls.Count - 1; i >= 0; i--)
{
// Handle controls inheriting AlphaControl only
AlphaControl ctrl = _control.Controls[i] as AlphaControl;
if (ctrl == null)
continue;
// Something to draw?
Rectangle clipRect =
Rectangle.Intersect(e.ClipRectangle, ctrl.Bounds);
if (clipRect.IsEmpty)
continue;
// Clip to the control bounds
gxBuffer.Clip = new Region(clipRect);
// Perform the actual drawing
ctrl.DrawInternal(gxBuffer);
}
// Restore clip bounds
gxBuffer.Clip = gxClipBounds;
}
// Put the final composed image on screen.
e.Graphics.DrawImage
(_backBuffer, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
}
else
{
// This should never happen, should it?
e.Graphics.Clear(_control.BackColor);
}
}
}
AlphaControl inherits from the Control class and hides itself.
/// <summary>
/// Default constructor.
/// </summary>
public AlphaControl()
{
base.Visible = false;
}
It has a method drawinternal which is called from its parent container (either AlphaPanel or AlphaForm). This drawinteral method calls the draw method of the derived classes. The draw method paints/draws the control on the container using methods like drawstring, drawrectangle, drawline.
/// <summary>
/// Internal Draw method, called by the container.
/// Will call the actual Draw method if the control is visible.
/// </summary>
internal void DrawInternal(Graphics gx)
{
if (_visible)
Draw(gx);
}
/// <summary>
/// Must be overridden.
/// </summary>
public virtual void Draw(Graphics gx)
{
}
I shall post further articles:
AlphaImage controls AlphaButton, AlphaListBox and other controls. Once those articles are posted, I shall update this article with the links. AlphaMobile controls have been a very interesting piece of development with a lot of scope to extend the functionalities and control collections. Some possible enhancements can be empowering controls with designer support. This can be very useful while using Alpha Datagrid controls or other list controls.
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 17 Sep 2009 Editor: Deeksha Shenoy |
Copyright 2009 by Atanu Mandal Everything else Copyright © CodeProject, 1999-2009 Web20 | Advertise on the Code Project |