Hi,
I'm trying to implement F11 feature - full screen in my application.
It works like a charm for standard .NET Form, but for RadForm I have some inaccuracy.
Win7 x64 - on the top of the screen I see part of title bar which should be normally hidden by calling "targetForm.FormBorderStyle = FormBorderStyle.None;".
WinXP - on the top I still can see like 2px space from title bar, but more important is that it doesn't cover Windows taskbar in the bottom of the screen.
The Code is simple:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls;
using
Telerik.WinControls.UI;
namespace
RadControlsWinFormsApp1
{
public
partial
class
RadForm1 : RadForm
{
public
FormState fs =
new
FormState();
public
RadForm1()
{
InitializeComponent();
}
private
void
radButton1_Click(
object
sender, EventArgs e)
{
fs.Maximize(
this
);
}
private
void
radButton2_Click(
object
sender, EventArgs e)
{
fs.Restore(
this
);
}
}
/// <summary>
/// Selected Win AI Function Calls
/// </summary>
public
class
WinApi
{
[System.Runtime.InteropServices.DllImport(
"user32.dll"
, EntryPoint =
"GetSystemMetrics"
)]
public
static
extern
int
GetSystemMetrics(
int
which);
[System.Runtime.InteropServices.DllImport(
"user32.dll"
)]
public
static
extern
void
SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int
X,
int
Y,
int
width,
int
height,
uint
flags);
public
static
void
SetWinFullScreen(IntPtr hwnd)
{
SetWindowPos(hwnd, IntPtr.Zero, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), 64);
}
}
/// <summary>
/// Class used to preserve / restore state of the form
/// </summary>
public
class
FormState
{
private
FormWindowState winState;
private
FormBorderStyle brdStyle;
private
bool
topMost;
private
Rectangle bounds;
public
bool
IsMaximized =
false
;
public
void
Maximize(RadForm targetForm)
{
if
(!IsMaximized)
{
IsMaximized =
true
;
Save(targetForm);
targetForm.WindowState = FormWindowState.Maximized;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.TopMost =
true
;
WinApi.SetWinFullScreen(targetForm.Handle);
}
}
public
void
Save(RadForm targetForm)
{
winState = targetForm.WindowState;
brdStyle = targetForm.FormBorderStyle;
topMost = targetForm.TopMost;
bounds = targetForm.Bounds;
}
public
void
Restore(RadForm targetForm)
{
targetForm.WindowState = winState;
targetForm.FormBorderStyle = brdStyle;
targetForm.TopMost = topMost;
targetForm.Bounds = bounds;
IsMaximized =
false
;
}
}
}
When you replace RadForm by Form everything is all right on both OS :-(
Any idea, any help?
Thanks Zbyněk