Also mein Ziel ist, dass ich sowohl im Fenster-, als auch im Vollbildmodus einen .. nunja einen normalen Windowscursor hab.
Ich seh dein Problem nicht wirklich, um genau das
nicht zu haben musst du den Cursor ja extra
abschalten...
Die GUI hat alle ihre Elemente in einer Einheitsauflösung gegeben, die dann je nach realer Auflösung skaliert werden. Die eingehende Position der Maus wird in die Einheitsauflösung umgerechnet damit man dort die Elemente kontrollieren kann.
Ja, das klingt vernünftig, macht aber keinen Unterschied wie du den Cursor machst, das umrechnen bleibt immer das gleiche...
Ehm kann sein, dass ich jetzt gewaltig auf der Leitung sitz :cry:
Bisher hab ich ja einen normalen Cursor verwendet, der über DirectInput gesteuert wurde; den Windowscursor hab ich im Fenstermodus ausgeblendet, im Vollbild hat er mich nicht gestört.
Um den Cursor unabhängig von Rucklern im Spiel zu machen, wollte ich jetzt einen Hardwarecursor nutzen -- vor langer Zeit hat mir bei dem Projekt PrimWar nämlich mal folgendes, im Nachhinein recht einleuchtendes geschrieben: (
http://www.developia.de/developia/viewpr…s.php?cid=30562)
"- Auf langsameren Rechnern (meiner gehört wohl dazu) wäre ein Hardwaremousecursor sehr nett (meist mit ein paar Zeilen implementiert)"
Ja, wenn du den Cursor in der Renderloop über ein Sprite zeichnest wirst du klarerweise dieses Problem haben. Um das Problem nicht zu haben müsstest du das Positionsupdate des Cursors wohl in einem separaten Thread laufen lassen, wobei das dann Probleme mit Direct3D machen kann, da das verwenden eines D3DDevice in mehreren Threads problematisch ist und ich nicht weis inwiefern die Cursor Funktionen damit klarkommen (du brauchst wenn dann vermutlich ein MULTITHREADED device und so eins is evtl. nicht so toll für die Performance).
Ich seh absolut keinen Grund sich das alles anzutun wenn einem Windows eh schon von Haus aus einen Cursor zur Verfügung stellt der alles kann was man braucht!?
Wenn man dann noch in der DX Doku auf den folgenden Satz stößt erscheint das ganze Vorhaben sowieso mit einem Schlag äußerst absurd:
Direct3D cursor functions use either GDI cursor or software emulation, depending on the hardware.
Kurz Zusammengefasst: Was du also tust ist einiges an Arbeit zu investieren nur um über GDI den Cursor abzuschalten und einen komplizierten Mechnismus zu bauen der im Endeffekt Direct3D dazu veranlasst für dich die GDI zu verwenden um das was du zuvor abgeschaltet hast über Umwege wieder einzuschalten und zu verwenden um, mit zusätzlichem Overhead, die zuvor bereits gegebene Funktionalität nachzubilden.
Noch Fragen?
Mein Tip: Schalt den Cursor doch von vornherein einfach
nicht ab