[C#] WPF Panel außerhalb des Fensters

05/06/2014 14:17 GodHacker#1
Hallo,
ich würde gerne wissen, wie man mit WPF ein Panel außerhalb des Fensters anzeigen lassen kann. Es soll ca. wie bei Steam sein, wo z.B. unten rechts immer die Nachrichten auftauchen, wenn jemand ein Spiel startet.
Wichtig ist mir nur, dass ich die Anzahl der Panels ggf. beschränken kann und, dass sie auch diesen Effekt haben, als ob die von unten ausgefahren werden.
Ich würde mich freuen, wenn jemand die Lösung weiß.

Danke schon einmal im Voraus für jede Hilfe.
05/06/2014 15:02 Mostey#2
Nutzt du ein Framework? Pattern?

Grundsätzlich sollte dafür ne extra View her. Solltest du MVVM als Pattern verwenden, kannst du in das ViewModel ne statische Eigenschaft packen, die Instanzen mitzählt. Dementsprechend kannst du diese auch begrenzen.

Ein Panel außerhalb des sichtbaren Fensters zu platzieren wäre unsauber und würde auf Dauer auch kaum gut funktionieren, wenn du mehrere Betriebssysteme und Auflösungen ansprechen wollen würdest.
05/06/2014 16:26 GodHacker#3
Ich weiß gerade nicht, was du mit Framework, Pattern und MVVM meinst. ^^
Habe gerade mit WPF angefangen und weiß noch nicht wirklich, wie es geht. Habe aber auch gelesen, dass man etwas auf einem Overlay machen kann, was dann auch über anderen Programmen (z.B. fullscreen spielen) liegen würde.
Währe dass vllt eine option?
05/06/2014 16:41 Mostey#4
Quote:
Originally Posted by GodHacker View Post
Ich weiß gerade nicht, was du mit Framework, Pattern und MVVM meinst. ^^
Für WPF gibt es einige bekannte Frameworks und Architekturpattern, nach denen man vorgehen kann, um bewusst zwischen Code, Logik und Design zu unterscheiden.

Eigentlich nutzen relativ wenige den alten Stil aus dem WinForms Framework, da WPF viel mehr drauf hat, wenn es richtig genutzt wird.



Quote:
Originally Posted by GodHacker View Post
Habe gerade mit WPF angefangen und weiß noch nicht wirklich, wie es geht. Habe aber auch gelesen, dass man etwas auf einem Overlay machen kann, was dann auch über anderen Programmen (z.B. fullscreen spielen) liegen würde.
Währe dass vllt eine option?
Vielleicht, du kommst aber ohne ein weiteres Fenster nicht weiter.
05/06/2014 16:57 GodHacker#5
Quote:
Originally Posted by Mostey View Post
Für WPF gibt es einige bekannte Frameworks und Architekturpattern, nach denen man vorgehen kann, um bewusst zwischen Code, Logik und Design zu unterscheiden.

Eigentlich nutzen relativ wenige den alten Stil aus dem WinForms Framework, da WPF viel mehr drauf hat, wenn es richtig genutzt wird.
Hast du vllt ein paar beispiele von solchen Frameworks und Architekturpattern? Würde mit vllt helfen, dass ich direkt den richtigen Einstieg in WPF mache (und interessieren tut es mich jetzt sowieso, wenn du es schon so schön erwähnst ^^).


Quote:
Originally Posted by Mostey View Post
Vielleicht, du kommst aber ohne ein weiteres Fenster nicht weiter.
Damit hätte ich auch kein Problem.
Soll halt wie gesagt so sein, wie die Steam Nachrichten, die immer auftauchen.
05/06/2014 17:48 Mostey#6
Quote:
Originally Posted by GodHacker View Post
Hast du vllt ein paar beispiele von solchen Frameworks und Architekturpattern? Würde mit vllt helfen, dass ich direkt den richtigen Einstieg in WPF mache (und interessieren tut es mich jetzt sowieso, wenn du es schon so schön erwähnst ^^).




Damit hätte ich auch kein Problem.
Soll halt wie gesagt so sein, wie die Steam Nachrichten, die immer auftauchen.
Caliburn.Micro nutze ich derzeit für meine Projekte. Simpel und erleichtert einem die Nutzung sehr. [Only registered and activated users can see links. Click Here To Register...]

Die haben endlich ne vernünftige Dokumentation hinterhergeschoben.

Von WinForms zu MVVM: [Only registered and activated users can see links. Click Here To Register...]
05/06/2014 18:30 GodHacker#7
Das sieht schon nice aus. ^^
Jetzt bleibt nur noch 1 Problem...
Wie kann ich ein Overlay erstellen, welches permanent (sowohl beim Desktop u. Programmen als auch Fullscreen-Spielen) da ist und wie man darauf dann das Fenster an einer Position öffnet.

Habe jetzt schon viel danach gesucht und finde immer nur, dass man eine dll injekten soll (was aber ggf. dann von Schutzsystemen von Spielen entdeckt wird und es dann ggf. sperren gibt, da es nicht erlaubt ist) oder indem man es per DirectX macht, wo ich aber keine Ahnung habe wie und ob es dann immer da ist.
05/06/2014 18:43 Mostey#8
Kannst dich ja hier der Diskussion anschließen: [Only registered and activated users can see links. Click Here To Register...]

Da geht's um dein Vorhaben. Ich halte von TopMost zwar nichts um etwas dergleichen umzusetzen, möglich scheint es aber trotzdem zu sein. Sieht halt wahrscheinlich nicht so schön aus, wie wenn du es über DirectX zeichnest.
05/06/2014 19:42 GodHacker#9
Quote:
Originally Posted by Mostey View Post
Kannst dich ja hier der Diskussion anschließen: [Only registered and activated users can see links. Click Here To Register...]

Da geht's um dein Vorhaben. Ich halte von TopMost zwar nichts um etwas dergleichen umzusetzen, möglich scheint es aber trotzdem zu sein. Sieht halt wahrscheinlich nicht so schön aus, wie wenn du es über DirectX zeichnest.
Ja davon habe ich auch gelesen, aber direkt wieder verworfen, da es nichts bringt (rein logisch gesehen, von dem was ich gelesen habe).
Hier mal ein Link: [Only registered and activated users can see links. Click Here To Register...] (Post #6 meine ich)
05/06/2014 20:40 Mostey#10
Ich glaube kaum das so gehandelt wird. Ich denke, dass das OS eine TopMost Benachrichtigung bekommt und das alte Fensterhandle kickt und dafür das neue reinhaut und eben dafür das Flag setzt.

Das klingt für mich plausibler als das, was er da schreibt.

Auf die Schnelle habe ich auch nichts in Google gefunden, überall wird nur danach gefragt aber entweder kommt da keine Antwort oder es heißt, das DirectX auch trotz TopMost davor angezeigt wird.

Wenn man mal wüsste, wie DirectX da genau arbeitet. An sich weiß ich, das die Scene alle n FPS geupdated wird. Ich kann mir sehr gut vorstellen, das dabei automatisch das TopMost Flag gesetzt wird, wenn die App im Vordergrund läuft und das deine zweite App quasi sofort unterdrückt wird.
05/07/2014 00:34 YatoDev#11
über fullscreen spiele kannst du kein fenster legen. Im windowed mode geht das(viele spiele bieten da auc eine borderless option)
steam macht das mit einer dll. mit einer eigenen besteht die gefahr gebannt zu werden.
05/07/2014 00:54 GodHacker#12
Quote:
Originally Posted by Mostey View Post
Ich glaube kaum das so gehandelt wird. Ich denke, dass das OS eine TopMost Benachrichtigung bekommt und das alte Fensterhandle kickt und dafür das neue reinhaut und eben dafür das Flag setzt.

Das klingt für mich plausibler als das, was er da schreibt.

Auf die Schnelle habe ich auch nichts in Google gefunden, überall wird nur danach gefragt aber entweder kommt da keine Antwort oder es heißt, das DirectX auch trotz TopMost davor angezeigt wird.

Wenn man mal wüsste, wie DirectX da genau arbeitet. An sich weiß ich, das die Scene alle n FPS geupdated wird. Ich kann mir sehr gut vorstellen, das dabei automatisch das TopMost Flag gesetzt wird, wenn die App im Vordergrund läuft und das deine zweite App quasi sofort unterdrückt wird.
Klingt wirklich einläuchtender.

Quote:
Originally Posted by »FlutterShy™ View Post
über fullscreen spiele kannst du kein fenster legen. Im windowed mode geht das(viele spiele bieten da auc eine borderless option)
steam macht das mit einer dll. mit einer eigenen besteht die gefahr gebannt zu werden.
Wenn ich es richtig verstehe kann man kein Overlay über ein Fullscreen-Spiel legen auf dem man dann das Fenster startet. Somit muss man es per Dll-Injection machen korrekt?
05/07/2014 12:43 YatoDev#13
Quote:
Originally Posted by GodHacker View Post
Wenn ich es richtig verstehe kann man kein Overlay über ein Fullscreen-Spiel legen auf dem man dann das Fenster startet. Somit muss man es per Dll-Injection machen korrekt?
ja. du kannst auch nicht mit gdi+ draufmalen da das spiel kein fenster ist
05/07/2014 12:47 Mostey#14
Quote:
Originally Posted by »FlutterShy™ View Post
ja. du kannst auch nicht mit gdi+ draufmalen da das spiel kein fenster ist
Wieso sollte es kein Fenster sein?
05/07/2014 14:41 GodHacker#15
Quote:
Originally Posted by Mostey View Post
Wieso sollte es kein Fenster sein?
Das würde ich nun aber auch gerne wissen...