Wie man ein Fenster über allem erscheinen lässt (sogar Vollbild-Spiele!) c ++ / Qt

8

Ich versuche, eine Anwendung zu erstellen, die ein Fadenkreuz in der Mitte des Bildschirms anzeigt und über allem anderen bleibt. Ziel ist es, in einigen FPS-Spielen ein Fadenkreuz zu haben, das keins bietet. Ich habe mein Fenster erfolgreich für alles außer den Spielen gemacht: /

Hier ist mein Code: (alles ist in der Hauptsache, da ich nur die Kernfunktionen meiner App teste, ich habe es ausgiebig kommentiert, um mein Problem leichter zugänglich zu machen)

%Vor%

Ich schätze, dass Anwendungen wie Spiele eine direktere Kontrolle über das Anzeigegerät haben. Ich suche nach einer Lösung für dieses Problem (nicht notwendigerweise eines transparenten obersten Fensters). Auch auf einer Nebenbemerkung, wenn mir jemand erklären könnte, wie man GetLastError () effektiv einsetzt, und auch, warum sich Spiel anders verhält als ein gewöhnliches Fenster.

Vielen Dank im Voraus.

    
pogdhu 18.04.2012, 13:47
quelle

3 Antworten

2
___ answer12315251 ___

Ich fand, dass die c ++ Bibliothek DirectDrawOverlayLib in der Lage sein sollte, dies zu tun. Um die Webseite zu zitieren:

  

Eine nicht verwaltete C ++ - Bibliothek zum Erstellen, Verwalten und Zeichnen von DirectDraw-Overlays. EIN   C ++ / CLI-Wrapper für .NET-Clients ist enthalten.

     

DirectDraw-Overlays sind spezielle DirectDraw-Oberflächen, die angezeigt werden   über alles andere, einschließlich Vollbild-Spiele und Anwendungen.   Sie können verwendet werden, um Programme wie XFire zu implementieren, die Informationen während des Spielbetriebs im Vollbild anzeigen.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123qt ___ Qt ist ein plattformübergreifendes Anwendungsentwicklungs-Framework, das häufig für die Entwicklung von Anwendungssoftware verwendet wird, die auf verschiedenen Software- und Hardwareplattformen ohne oder mit nur geringer Änderung der zugrundeliegenden Codebasis ausgeführt werden kann. Qt ist sowohl mit kommerziellen als auch mit Open-Source-Lizenzen verfügbar. ___ qstnhdr ___ Wie man ein Fenster über allem erscheinen lässt (sogar Vollbild-Spiele!) c ++ / Qt ___ answer10210928 ___

Von der SetWindowPos () Dokumentation:

  

Ein Fenster kann zu einem obersten Fenster gemacht werden, indem Sie entweder die   hWndInsertAfter Parameter zu HWND_TOPMOST und sicherstellen, dass die   SWP_NOZORDER-Flag ist nicht festgelegt oder durch Festlegen der Position eines Fensters in der   Z-Reihenfolge, so dass es über allen vorhandenen obersten Fenstern liegt. Wenn ein   das nicht oberste Fenster wird zuoberst gemacht, seine eigenen Fenster werden ebenfalls gemacht   oberste. Seine Besitzer werden jedoch nicht geändert.

Auch von derselben Seite:

  

Um SetWindowPos zu verwenden, um ein Fenster an die Spitze zu bringen, der Prozess, der   Besitzt das Fenster muss SetForegroundWindow-Berechtigung haben.

Allerdings denke ich, dass der Link für Windows Vista und höher ist.

    
___ qstntxt ___

Ich versuche, eine Anwendung zu erstellen, die ein Fadenkreuz in der Mitte des Bildschirms anzeigt und über allem anderen bleibt. Ziel ist es, in einigen FPS-Spielen ein Fadenkreuz zu haben, das keins bietet. Ich habe mein Fenster erfolgreich für alles außer den Spielen gemacht: /

Hier ist mein Code: (alles ist in der Hauptsache, da ich nur die Kernfunktionen meiner App teste, ich habe es ausgiebig kommentiert, um mein Problem leichter zugänglich zu machen)

%Vor%

Ich schätze, dass Anwendungen wie Spiele eine direktere Kontrolle über das Anzeigegerät haben. Ich suche nach einer Lösung für dieses Problem (nicht notwendigerweise eines transparenten obersten Fensters). Auch auf einer Nebenbemerkung, wenn mir jemand erklären könnte, wie man GetLastError () effektiv einsetzt, und auch, warum sich Spiel anders verhält als ein gewöhnliches Fenster.

Vielen Dank im Voraus.

    
___ tag123topmost ___ Oberste ist ein universeller Begriff, der das Objekt beschreibt, das über den anderen angezeigt wird. Es wird normalerweise in Verbindung mit Fenstern in Desktopumgebungen verwendet. ___ antwort10211239 ___

Ich weiß, das hilft Ihnen nicht wirklich, aber sehen Sie sich bitte diesen Beitrag von Raymond Chen: Wie erstelle ich ein oberstes Fenster? das wird nie von anderen obersten Fenstern abgedeckt?

    
___
Stefan 18.04.2012 14:13
quelle
1

Von der SetWindowPos () Dokumentation:

  

Ein Fenster kann zu einem obersten Fenster gemacht werden, indem Sie entweder die   hWndInsertAfter Parameter zu HWND_TOPMOST und sicherstellen, dass die   SWP_NOZORDER-Flag ist nicht festgelegt oder durch Festlegen der Position eines Fensters in der   Z-Reihenfolge, so dass es über allen vorhandenen obersten Fenstern liegt. Wenn ein   das nicht oberste Fenster wird zuoberst gemacht, seine eigenen Fenster werden ebenfalls gemacht   oberste. Seine Besitzer werden jedoch nicht geändert.

Auch von derselben Seite:

  

Um SetWindowPos zu verwenden, um ein Fenster an die Spitze zu bringen, der Prozess, der   Besitzt das Fenster muss SetForegroundWindow-Berechtigung haben.

Allerdings denke ich, dass der Link für Windows Vista und höher ist.

    
Donotalo 18.04.2012 13:56
quelle
1

Ich fand, dass die c ++ Bibliothek DirectDrawOverlayLib in der Lage sein sollte, dies zu tun. Um die Webseite zu zitieren:

  

Eine nicht verwaltete C ++ - Bibliothek zum Erstellen, Verwalten und Zeichnen von DirectDraw-Overlays. EIN   C ++ / CLI-Wrapper für .NET-Clients ist enthalten.

     

DirectDraw-Overlays sind spezielle DirectDraw-Oberflächen, die angezeigt werden   über alles andere, einschließlich Vollbild-Spiele und Anwendungen.   Sie können verwendet werden, um Programme wie XFire zu implementieren, die Informationen während des Spielbetriebs im Vollbild anzeigen.

    
Thorbjorn 07.09.2012 09:21
quelle

Tags und Links