Wie kann man am besten feststellen, ob ein Fenster in WPF tatsächlich sichtbar ist?

9

Ich versuche, die Anzeige eines kleinen Fensters basierend auf dem Klick auf ein Benachrichtigungssymbol in einer Taskleiste-App umzuschalten. Dies ist zwar einfach genug zu implementieren, aber wenn das kleine Fenster angezeigt wird und eine andere Anwendung den Fokus nimmt und sich davor bewegt (z-Reihenfolge) möchte ich, dass das kleine Fenster jetzt ausgeblendet ist, obwohl es sichtbar ist immer noch sichtbar. Anderenfalls würde das Klicken auf das Symbol die Fenstersicht unsichtbar machen, obwohl sie bereits hinter einer anderen versteckt ist. Ich habe versucht, die Methoden activate und deactive abzufangen / zu überschreiben, um den Überblick zu behalten. Wenn Sie jedoch auf das Benachrichtigungssymbol klicken, wird das deaktivierte Ereignis immer zuerst ausgelöst. Ein ähnlicher Ansatz, bei dem Fokus / verlorener Fokus verwendet wurde, funktionierte ebenfalls nicht, da das Fenster zu glauben schien, dass es immer noch fokussiert war, selbst wenn es hinter einem anderen aktiven Anwendungsfenster verborgen war. Am Ende musste ich wie folgt auf den systemeigenen Code und die WindowFromPoint-Methode zurückgreifen:

%Vor%

Dies überprüft, ob das an den Koordinaten der Mitte des fraglichen Fensters zurückgegebene Fenster mit dem Fenster übereinstimmt. d.h. die Mitte des fraglichen Fensters ist sichtbar.

Das scheint ein bisschen hacky zu sein, gibt es einen schöneren Weg, um das gleiche Ergebnis zu erzielen?

    
LaserJesus 18.01.2009, 07:58
quelle

1 Antwort

2

Sie möchten sich vielleicht nicht darauf verlassen, ob ein Fenster blockiert ist, da es viele Faktoren gibt, die die Fenstergröße, Positionierung usw. ändern können und alle in Accessibility-Funktionen eingebunden sind, die noch mehr Komplexität hinzufügen.

Stattdessen sollten Sie überprüfen, ob das Fenster den Fokus hat oder nicht. So weiß MSN Messenger, ob er in der Taskleiste orange blinkt oder nicht; Es löst eine Benachrichtigung aus und wenn es keinen Fokus hat, blinkt die Taskleiste.

    
Soviut 18.01.2009 09:02
quelle

Tags und Links