Although I do not yet know a use case for this, here comes some code to make your smartdevice forms being moveable.
As default, Windows forms on mobile devices are created always as maximized forms. There may be situations, where you need a moveable form. The trick in compact framework is to use
SetWindowLong
with WS_CAPTION
style and apply that to your form.
To enable you to experiment more with Window Styles there is another demo enabling to check all known window
styles with a form. Be warned, setting WS_DISABLED
or some other styles will make your form inaccessible.
The above changes or Window Styles are well known to every native C Windows programmer. Possibly you are now curious what else can be done with a good background knowledge of Windows API programming.
Another nice piece of code is how to get a list of an enum type. The below needs a list of options to build the checkboxes in the form:
void buildOptions()
{
string[] stylesList = winapi.getStyles();
int iCount=0;
foreach (string s in stylesList)
{
CheckBox chkBox = new CheckBox();
chkBox.Left = offsetX;
chkBox.Top = iCount * offsetY;
chkBox.Size = new Size(widthX, heightX);
chkBox.Text = s;
uint uStyle = (uint)Enum.Parse(typeof(winapi.WINSTYLES),s,false);
if ((uiCurrentStyle & uStyle) == uStyle)
chkBox.Checked = true;
chkBox.CheckStateChanged += new EventHandler(chkBox_CheckStateChanged);
tabPage1.Controls.Add(chkBox);
iCount++;
}
}
But an enum can not be enumerated ( great wording " src="http://www.hjgode.de/wp/wp-includes/images/smilies/icon_smile.gif" /> ). Although you could build the list by hand, I am a lazy programmer. I already have entered all the values as an enum.
But there is a solution:
public static string[] getStyles()
{
List<string> list = new List<string>();
foreach (WINSTYLES ws in GetValues(new WINSTYLES()))
{
list.Add(ws.ToString());
}
return list.ToArray();
}
with the special GetValues()
function for the enum (WINSTYLES
):
...
[Flags]
public enum WINSTYLES:uint{
WS_OVERLAPPED = 0x00000000,
...
WS_MAXIMIZE= 0x01000000,
WS_CAPTION = 0x00C00000,
...
WS_MAXIMIZEBOX= 0x00010000,
WS_POPUPWINDOW= 0x80880000,
}
...
public static IEnumerable<Enum> GetValues(Enum enumeration)
{
List<Enum> enumerations = new List<Enum>();
foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(
BindingFlags.Static | BindingFlags.Public))
{
enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
}
return enumerations;
}
Have fun.
Download: MoveableForms Source and Binary - VS2008, WM5 SDK, WM6.5.3
DTK (Hits: 7, size: 98.51 KB)