9 Stimmen

Überwindung der vom Betriebssystem auferlegten Mindestgrößenbeschränkung für Windows-Formulare

In einer Anwendung, die ich entwickle, muss ich in der Lage sein, ein Windows-Formular kleiner zu machen als die vom Betriebssystem vorgegebene Mindesthöhe (36 px in Vista). Ich habe versucht, WM_GETMINMAXINFO abzufangen und meine eigenen Informationen bereitzustellen, um die OS-Grenzen außer Kraft zu setzen, aber das funktioniert nur für den Benutzer. Über den Code kann ich die Höhe auf einen Wert setzen, der kleiner ist als der Grenzwert, aber meine Änderung funktioniert nur, bis WM_WINDOWPOSCHANGED in die Nachrichtenwarteschlange gestellt wird (was kurz nach der Änderung der Höhe geschieht).

0voto

Hirnilein0815 Punkte 3

Ich habe die Antwort von Zach befolgt und mein Problem damit fast gelöst. Bei einer Einrichtung mit zwei Monitoren verschwand das Formular jedoch, als es auf dem zweiten Bildschirm maximiert wurde. Aus irgendeinem Grund positionierte Windows das Formular außerhalb des sichtbaren Bereichs. Das Hinzufügen eines Tests für den primären Bildschirm löste dieses Problem für mich:

if (m.Msg == (int)CWinApi.Messages.WM_GETMINMAXINFO)
{
    if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.None)
    {
        Screen screen = Screen.FromControl(this);

        if (screen.Primary)
        {
            CWinApi.MINMAXINFO minMaxInfo = (CWinApi.MINMAXINFO)m.GetLParam(typeof(CWinApi.MINMAXINFO));

            minMaxInfo.ptMaxSize.x = screen.WorkingArea.Size.Width;
            minMaxInfo.ptMaxSize.y = screen.WorkingArea.Size.Height;
            minMaxInfo.ptMaxPosition.x = screen.WorkingArea.X;
            minMaxInfo.ptMaxPosition.y = screen.WorkingArea.Y;

            System.Runtime.InteropServices.Marshal.StructureToPtr(minMaxInfo, m.LParam, true);
        }
    }
}

0voto

Johannes Punkte 432

Hat jemand eine WPF-Version von diesem? Ich konnte es nicht bekommen, um auf meinem Fenster zu arbeiten, es scheint nicht eine Möglichkeit, die

base.WndProc(ref m)

Funktion beim Hinzufügen eines Hooks zur WndProc-Funktion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X