Overlay, aber wie in XP?



  • Hallo zusammen,

    ich möchte eine Zahl als Overlay auf dem Desktop und in Spielen anzeigen.
    Das Ganze soll so wie Fraps funktionieren (www.fraps.com).
    Leider ist das normale Overlay von Win95 nicht mehr vorhanden.

    Kurz: Wie würdet ihr das machen?
    Voraussetzung ist wie bei Fraps, das es einfach überall funktioniert.

    Grüße
    thenoname



  • Du könntest die aktiven Fenster herausfinden, wenn du dann das HWND des Fensters hast, bekommst du auch das HDC, und dieses DC kannst du dann jeweils neu beschreiben.



  • Hi,

    ja, aber das Spiel hat unterschiedliche framerates und es würde alles überschreiben =Flackern.



  • Du kannst ja auch nur einen bestimmten bereich des DC beschreiben. Ich habe zwar noch nie davon gehört, aber vieleicht gibt es ja eine Funktion mit der man herausbekommt ob ein DC gerade beschrieben wurde. Dann kannst du einfach testen ob der DC beschrieben wurde, und wenn das der fall ist, beschreibst du einen kleinen Teil mit deinem eigenen DC neu.

    Was mir gerade einfällt, du könntest doch einfach die Nachrichten des anderen Fensters überwachen, und jedes mal wenn eine WM_PAINT Nachricht von dem Fenster aus geht, beschreibst du es neu 🙂



  • Irgendwie glaube ich nicht, das DirectX Message gesteuert arbeitet, da Messages ja ziemliche Verzögerungen haben. Wahrscheinlicher wird wohl ein Hook auf "irgendwas" sein, der dann sagt, das ein Bild fertig ist. Da könnte man dann vorher mit dem passenden HWND, das der Hook ja mitführen wird, was draufmalen.
    Jedoch scheint das bei Fraps nicht so zu laufen, da mein Virenscanner hier keine Hook Nachricht bringt. Das ist aber nur eine Vermutung.



  • Intern haben die Nachrichten keine verzögerung, höchstens vieleicht wenn du sie von außerhalb abfangen möchtest, wenn das zweite programm eine zu niedriege frame rate hat. Und es ist doch egal ob DirectX nun Message gesteuert oder nicht Message gesteuert arbeitet, es reicht doch wenn die WinAPI dies tut!

    Eine andere möglichkeit die da noch währe wo ich mir aber nicht sicher bin ob das wirklich geht, ist die, das du dem Spielefenster ein Childfenster verpasst! Das Childfenster ist 100% tansparent, und du zeichnest darin dann die Zahlen! Das Childfenster wird dann immer automatisch neu beschrieben, oder meist muss es ja eigentlich garnicht neu beschrieben werden. Du schreibst einmal die Zahlen hinein, und dann stehen sie da auch solange bis du sie wieder löscht!



  • Wenn ich die Projekte von CodeProject durchgehe, dann sieht es sehr sehr lau aus.
    Meistens werden in den Komentaren die Projekte als nicht funktionierend gemeldet.
    Primär scheint ein DirectX Vollbild keinen Fensterzugriff zu erlauben.
    Dann gibt es noch einen Lichtblick, in dem eine DLL Datei aus den ATI Traytools
    verwendet wird, allerdings anscheinend nicht für Vista64 tauglich.
    Immerhin könnte hier nVidia und ATI verwendet werden, weil es anscheined sehr
    große Probleme mit nVidia gibt.
    Wenigstens würde diese DLL für einige Zeit aktualisiert werden, wenn weitere
    Graka Probleme auftauchen und evtl. bald einen Vista64 Kombatibilitätsmodus erhalten.

    Ein child Fenster in DirectX Vollbild?
    Das wird dann wohl eher ein DirectX Fenster sein?
    Nachdem sehr viele Projecte in dieser Richtung niedergemacht werden, wird es wohl so nicht funktionieren 😞



  • Es gibt keine DirectX Fenster! Auch wenn du im Vollbild etwas startest, es ist und bleibt ein Windows Fenster, der einzige unterschied ist das die Auflösung während der Laufzeit angepasst wird! Direct3D kann nur rendern, und löst in keinster weise die WinAPI ab!

    Probier einfach aus ob es mit den Chilfenstern geht, ich habe das gerade bei mir mal ausprobiert, und es flackert nichts im Vollbild Modus. Wenn du ganz sicher gehen willst das auch wirklich nichts flackert, kannst du ja einfach jedes mal das Chilfenster neu zeichnen wenn im Hauptfenster gezeichnet wird.

    Es ist aber so, das Jedes Fenster seinen eigenen DC hat, und dann am ende wenn alles gezeichnet wird, wird der DesktopDC der rheihe nach wie die Fenster stehen mit dem jeweiligen Inhalt beschrieben. Wenn du also das DC des Chilfensters auch nicht anrührst, bleibt die schrift trotzdem stehen, weil bei jedem zeichnen automatisch das Childfenster auf den Bildschirm geblittet wird.


Anmelden zum Antworten