Feedback

C# - Fenster am Bildschirmrand andocken

Veröffentlicht von am 05.11.2006
(2 Bewertungen)
Das Beispiel reserviert 100 Pixel Desktop Platz (oben) und positioniert das aktuelle Form in diesem Bereich
GFU-Schulungen  [Anzeige]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

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);
    }
}
Abgelegt unter AppBar, Andocken, Docken, Fenster, Rand, Bildschirmrand.

2 Kommentare zum Snippet

Rainbird schrieb am 05.11.2006:
Bei so einem komplexen Snippet, sollten Kommentare und XML-Doku-Tags nicht fehlen.
crokale schrieb am 20.10.2010:
Bei mir wird die Form nicht in dem neuen erzeugtem Bereich angezeigt sondern ist im desktop zu sehe. Wo ran liegt das?
 

Logge dich ein, um hier zu kommentieren!