![]() |
Platforms, Frameworks & Libraries »
Mobile Development »
General
Intermediate
Full Screen Application: Windows CE and Pocket PCBy Oleg LevinMaking full screen application for Windows CE and Pocket PC devices |
C#2.0, Windows, WinMobile, .NETCF, .NET, Visual-Studio, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||


Many developers must include a "full screen" feature into their applications. In this article, I am focusing on Pocket PC and Windows CE devices. I've tried to introduce a universal solution for PDA software developers using the .NET Compact Framework that will enable them to include a full screen mode on both platforms, without requiring recompilation or code changes.
Why do we need a full screen mode on our PDAs? My three main reasons are:
There are three steps to my full screen solution.
Platform type detection is a simple call to SystemParametersInfo to find whether you are running on a Smartphone or a Pocket PC. You need a few constants defined and the P/Invoke marshaling code to make it work from managed code. I am using SystemParametersInfo4Strings P/Invoke to detect if the device is a Pocket PC or not.
public enum SystemParametersInfoActions : uint
{
SPI_GETPLATFORMTYPE = 257,
// this is used elsewhere for Smartphone/PocketPC detection
}
#endregion
///
/// Get Platform Type: Pocket Pc or Windows CE
///
///
public static string GetPlatformType()
{
StringBuilder platformType = new StringBuilder(50);
if (SystemParametersInfo4Strings(
(uint)SystemParametersInfoActions.SPI_GETPLATFORMTYPE,
(uint)platformType.Capacity, platformType, 0) == 0)
throw new Exception("Error getting platform type.");
return platformType.ToString();
}
Platform detection method:
/// /// Platform Detections methods /// internal partial class PlatformDetection { public static bool IsSmartphone() { return PInvoke.GetPlatformType() == "SmartPhone"; } public static bool IsPocketPC() { return PInvoke.GetPlatformType() == "PocketPC"; } }
P/Invoke descriptions:
//to find whether you are running on a Smartphone or a Pocket PC
[DllImport("Coredll.dll", EntryPoint = "SystemParametersInfoW",
CharSet = CharSet.Unicode)]
tatic extern int SystemParametersInfo4Strings(uint uiAction,
uint uiParam, StringBuilder pvParam, uint fWinIni);
//The GetCapture function retrieves a handle to the window
[DllImport("coredll.dll")]
private static extern IntPtr GetCapture();
//The SetCapture function sets the mouse capture to
//the specified window belonging to the current thread
[DllImport("coredll.dll")]
private static extern IntPtr SetCapture(IntPtr hWnd);
//This function can be used to take over certain areas of the screen
//It is used to modify the taskbar, Input Panel button,
//or Start menu icon.
[DllImport("aygshell.dll", SetLastError = true)]
private static extern bool SHFullScreen(IntPtr hwnd, int state);
//The function retrieves the handle to the top-level
//window whose class name and window name match
//the specified strings. This function does not search child windows.
[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr FindWindowW(string lpClass, string
lpWindow);
//changes the position and dimensions of the specified window
[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr MoveWindow(IntPtr hwnd, int x,
int y, int w, int l, int repaint);
This code is of the "set full screen" method:
//if not Pocket PC platform
if (!Platform.PlatformDetection.IsPocketPC())
{
//Set Full Screen For Windows CE Device
//Normalize windows state
form.WindowState = FormWindowState.Normal;
IntPtr iptr = form.Handle;
SHFullScreen(iptr, (int)FullScreenFlags.HideStartIcon);
//detect taskbar height
int taskbarHeight =
Screen.PrimaryScreen.Bounds.Height -
Screen.PrimaryScreen.WorkingArea.Height;
// move the viewing window north taskbar
// height to get rid of the command bar
MoveWindow(iptr, 0, -taskbarHeight,
Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height + taskbarHeight, 1);
// move the task bar south taskbar height so that it's
// not visible anylonger
IntPtr iptrTB = FindWindowW("HHTaskBar", null);
MoveWindow(iptrTB, 0, Screen.PrimaryScreen.Bounds.Height,
Screen.PrimaryScreen.Bounds.Width, taskbarHeight, 1);
}
else //pocket pc platform
{
//Set Full Screen For Pocket Pc Device
form.Menu = null;
form.ControlBox = false;
form.FormBorderStyle = FormBorderStyle.None;
form.WindowState = FormWindowState.Maximized;
form.Text = string.Empty;
}
private void MainForm_Load(object sender, EventArgs e)
{
FullScreen.StartFullScreen(this);
}
private void MainForm_Closing(object sender, CancelEventArgs e)
{
FullScreen.StopFullScreen(this);
}
In addition, you can customize forms as well as set your own title with battery life and your own close button. Let's do it!
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 14 Jun 2007 Editor: Genevieve Sovereign |
Copyright 2007 by Oleg Levin Everything else Copyright © CodeProject, 1999-2010 Web19 | Advertise on the Code Project |