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).
Antworten
Zu viele Anzeigen?
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);
}
}
}
Johannes
Punkte
432
- See previous answers
- Weitere Antworten anzeigen