Benutzer mit den meisten Antworten
Toolbar mit Eigenschaften/ Verhalten der Taskleiste

Frage
-
Hallo Zusammen,
Ich sitze gerade an einer Anwendung die das selbe Verhalten wie die Windows Taskleiste aufweisen soll. Nun bin ich auf ein Problem gestoßen, dass ich trotz langer Recherche nicht Lösen konnte. Ich habe dazu leider nichts gefunden.
Meine Windows Taskleiste ist unten fixiert. Ich hätte gerne Rechts eine Toolbar/Taskleiste (meine Anwendung), die sich so verhält als hätte ich eine zweite Taskleiste.Also z.B. beim Maximieren anderer Fenster berücksichtigt wird und die beim Befehl "Desktop anzeigen" nicht minimiert wird.
Die Positionierung habe ich bereits abhänigig der Bildschirmauflösung. Allerdings komme ich hier leider nicht weiter.
Hätte hier jemand evtl eine Idee, oder weiß ob das überhaupt möglich ist. Habe leider keine Idee mehr wie ich dies bewerkstelligen kann.Meine Anwendung ist in VS2017/Windows10 programmiert.
Antworten
-
Hab das und das gefunden. Daraus ergibt sich dieser Lösungsansatz:
[StructLayout(LayoutKind.Sequential)] public struct Rect { public int Left; public int Top; public int Right; public int Bottom; } [DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")] private static extern int SystemParametersInfo(SPI uiAction, int uiParam, ref Rect pvParam, SPIF fWinIni); [Flags] private enum SPIF : uint { UPDATEINIFILE = 0x0001, SENDCHANGE = 0x0002 } private enum SPI : uint { SETWORKAREA = 0x002F, GETWORKAREA = 0x0030 } private void Form1_Load(object sender, EventArgs e) { Rect deskArea = new Rect(); SystemParametersInfo(SPI.GETWORKAREA, 0, ref deskArea, 0); deskArea.Bottom -= 50; SystemParametersInfo(SPI.SETWORKAREA, 0, ref deskArea, SPIF.UPDATEINIFILE); }
Das ist sicher noch nicht optimal. Bereits maximierte Fenster werden nicht gleich angepasst, bei Multimonitor-Desktops muss man mehr aufpassen und der Client-Bereich sollte am Ende zurückgesetzt werden. Aber es ist vielleicht ein Anfang für dich.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 9. April 2019 08:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 22. April 2019 13:47
Alle Antworten
-
Hab das und das gefunden. Daraus ergibt sich dieser Lösungsansatz:
[StructLayout(LayoutKind.Sequential)] public struct Rect { public int Left; public int Top; public int Right; public int Bottom; } [DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")] private static extern int SystemParametersInfo(SPI uiAction, int uiParam, ref Rect pvParam, SPIF fWinIni); [Flags] private enum SPIF : uint { UPDATEINIFILE = 0x0001, SENDCHANGE = 0x0002 } private enum SPI : uint { SETWORKAREA = 0x002F, GETWORKAREA = 0x0030 } private void Form1_Load(object sender, EventArgs e) { Rect deskArea = new Rect(); SystemParametersInfo(SPI.GETWORKAREA, 0, ref deskArea, 0); deskArea.Bottom -= 50; SystemParametersInfo(SPI.SETWORKAREA, 0, ref deskArea, SPIF.UPDATEINIFILE); }
Das ist sicher noch nicht optimal. Bereits maximierte Fenster werden nicht gleich angepasst, bei Multimonitor-Desktops muss man mehr aufpassen und der Client-Bereich sollte am Ende zurückgesetzt werden. Aber es ist vielleicht ein Anfang für dich.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 9. April 2019 08:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 22. April 2019 13:47