macht es Sinn (Stichwort usability) die Fensterposition und Größe der Anwendungsfenster zu speichern? Wenn ja wie löst Ihr das Problem mit wechselnden Auflösungen (Notebook mit externen Monitor etc.)?
Wo und wie speichert Ihr die Position und Größe ab?
Vielen Dank!
A programmer is just a tool, which converts coffeine into code!
da muss man nichts selber bauen, die Windows API bietet diese Funktion bereits. Folgenden Code habe ich mal (fast genauso) in einem Blog oder Artikel gefunden, weiß leider nicht mehr wo.
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
X = x;
Y = y;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public POINT minPosition;
public POINT maxPosition;
public RECT normalPosition;
}
public static class WindowPlacement
{
private const int SW_SHOWNORMAL = 1;
private const int SW_SHOWMINIMIZED = 2;
public static void SetPlacement(IntPtr windowHandle, WINDOWPLACEMENT placement)
{
placement.length = Marshal.SizeOf(typeof(WINDOWPLACEMENT));
placement.flags = 0;
placement.showCmd = placement.showCmd == SW_SHOWMINIMIZED ? SW_SHOWNORMAL : placement.showCmd;
NativeMethods.SetWindowPlacement(windowHandle, ref placement);
}
public static WINDOWPLACEMENT GetPlacement(IntPtr windowHandle)
{
var placement = new WINDOWPLACEMENT();
NativeMethods.GetWindowPlacement(windowHandle, out placement);
return placement;
}
private static class NativeMethods
{
[DllImport("user32.dll")]
public static extern bool SetWindowPlacement(IntPtr hWnd, [In]ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32.dll")]
public static extern bool GetWindowPlacement(IntPtr hWnd, out WINDOWPLACEMENT lpwndpl);
}
}
Ich habe leider noch nicht ausprobieren können wie gut das funktioniert, wenn ein Monitor nicht mehr da ist. Wenn du möchtest kannst du mich aufklären ;-)
Ich würde diesen Code vielleicht als Behavior implementieren, um diese Funktion auch mit anderen Fenstern nutzen zu können.
Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Lando am .
Dann liegt das Problem woanders - ich bekomm teilweise negative Werte oder Werte mit 254 etc.
Da der Code aber schon mal funktioniert hat, bin ich von einer Änderung ausgegangen.
Vielen Dank trotzdem!
A programmer is just a tool, which converts coffeine into code!
Ich hab mir den Code nicht angeschaut (und deinen Code zeigst Du nicht), aber negative Werte können durchaus vorkommen.
Die Position X:0/Y:0 ist immer links oben vom Haupt-Monitor!
Wenn Du links daneben einen zweiten Monitor hast, dann hat der eine negative X-Position.
Und wenn darüber ein zweiter Monitor ist, dann hat der eine negative Y-Position.
Wir schreiben die Daten in das lokale Profil des Benutzers, genauer gesagt in die Registry. Datenbank ist hier - denke ich - nicht notwendig, da es sich um unwichtige Informationen handeln, die der Nutzer jederzeit durch die Positionierung des Fensters wieder herstellen kann.
Interessanter ist aber, dass wir die Positionierung abhängig von der Gesamtauflösung (WorkingArea) speichern. Warum? Durch die ganze Homeoffice-Geschichte kommt es häufiger vor, dass auf den Rechner lokal oder remote zugegriffen wird und hier unterschiedliche Monitor-Konstellationen vorhanden sind.