Das Beispiel reserviert 100 Pixel Desktop Platz (oben) und positioniert das aktuelle Form in diesem Bereich
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
/// <sumary>
/// Beinhaltet Information über die Application Bar.
/// Eine ausführliche Beschreibung finden Sie in MSDN APPBARDATA Dokumentation.
/// </sumary>
[StructLayout(LayoutKind.Sequential)]
public struct APPBARDATA
{
public uint cbSize;
public IntPtr hWnd;
public uint uCallbackMessage;
public uint uEdge;
public RECT rc;
public int lParam;
}
/// <sumary>
/// Speichert Größe und Position der AppBAr.
/// </sumary>
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
public partial class Form1 : Form
{
const int ABM_NEW = 0x00000000;
const int ABM_REMOVE = 0x00000001;
const int ABM_SETPOS = 0x00000003;
const int ABM_QUERYPOS = 0x00000002;
const int ABE_TOP = 1;
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
/// <sumary>
/// OnLoad wird überschrieben, um die ApplicationBar zu initialisieren.
/// Dabei wird am oberen Rand des Desktops ein Bereich reserviert, in dem das Fenster dann platziert wird.
/// </sumary>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Datenstruktur für AppBar erzeugen und initialisieren.
APPBARDATA abd = new APPBARDATA();
abd.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
abd.hWnd = this.Handle;
abd.uCallbackMessage = RegisterWindowMessage(Guid.NewGuid().ToString());
// AppBar beim System registrieren.
SHAppBarMessage(ABM_NEW, ref abd);
// Größe und Position festlegen.
// In dem Beispiel wird oben am Desktop 100 Pixel Platz reserviert.
abd.rc = new RECT();
abd.uEdge = ABE_TOP;
abd.rc.top = 0;
abd.rc.left = 0;
abd.rc.bottom = 100;
abd.rc.right = SystemInformation.PrimaryMonitorSize.Width;
// Die Gröse und Position der AppBar prüfen.
// Wenn diese nicht gültig sind, werden die
// korrigierte Werte zurückgegeben.
SHAppBarMessage(ABM_QUERYPOS, ref abd);
// Größe und Position der AppBarsetzen
SHAppBarMessage(ABM_SETPOS, ref abd);
// Größe und Position des Anwendungsfenster im AppBar Bereich positionieren
Location = new Point(abd.rc.left, abd.rc.top);
Size = new Size(abd.rc.right, abd.rc.bottom);
}
/// <sumary>
/// Beim Beenden des Programms wieder aufräumen.
/// </sumary>
protected override void OnClosed(EventArgs e)
{
APPBARDATA abd = new APPBARDATA();
abd.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
abd.hWnd = this.Handle;
SHAppBarMessage(ABM_REMOVE, ref abd);
base.OnClosed(e);
}
[DllImport("shell32.dll")]
static extern IntPtr SHAppBarMessage(uint dwMessage,
ref APPBARDATA pData);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);
}
}
2 Kommentare zum Snippet