Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.08.2008, 03:23

[WinAPI] ShowCursor : etwas geht nicht :>

Guten Morgen Zusammen :>

In meinem Programm soll der Cursor der Maus ausgeblendet sein, wenn eine bestimmte Taste gedrückt ist.
Ich hab mich bisschen durch die msdn gewühlt und auch eine Funktion gefunden die eigentlich passen müsste.

Quellcode

1
int ShowCursor(BOOL bShow);


Bei mir siehts dann so aus:

Quellcode

1
2
3
4
if((GetAsyncKeyState(VK_SPACE) & 0x8000) != 0)
{ShowCursor(false);}
else
{ShowCursor(true);}


Irgendwie ist das Verhalten dann aber ziemlich seltsam. Erst blendet er gar nichts aus und dann bleibt der Cursor einfach weg - nachdem die Taste wieder losgelassen wurde.
Kann es vielleicht sein, dass die WinAPI es nicht mag, wenn man den Cursor, der bereits zu sehen ist nochmals mittels ShowCursor auf true setzt?

Gruss neptun

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

09.08.2008, 07:47

Also von vorne ... Schau dir an was GetAsyncKeyState() zurück gibt gibt. Dann frag dich, ob du deine Abfrage möglicherweise in einer Schleife ausführst ;)

Tipp: Es gibt vermutlich einen anderen Rückgabewert, der dir weiterhilft.

3

09.08.2008, 14:36

Hallo

Ja, das Ganze wird in einer Schlaufe ausgeführt - in der main-loop halt.
Mir ist jetzt nicht ganz klar, was du mit dem Rückgabe-Typ von GetAsyncKeyState meinst. Der Rückgabe-Typ ist ja eine short Bitmaske.
Wie kommst du darauf, dass es an GetAsyncKeyState liegen soll? Alle andern Tasten-Abfragen werden auch mittels GetAsyncKeyState gemacht - und die funktionieren problemlos.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

09.08.2008, 17:03

Naja, du willst die Änderung da vermutlich nicht permanent durchführen oder? Und es gibt eine Bitmaske, die bei Zustandsänderungen greift. Momentan änderst du den Wert von ShowCursor JEDEN Frame, da das ganze ja in der Hauptschleife gemacht wird. Keine Ahnung ob das daran liegen kann, aber erscheint mir nicht ganz sauber.

Edit: Jo, Starcraft bockt ;)

5

10.08.2008, 19:46

Doch ich will die änderung permanent durchführen. Ich will eigentlich den Maus-Cursor solange ausgeblendet haben, bis ich in wieder einblende.
Ich dachte einmal auf flase gesetzt, bleibt der Cursor auch unsichtbar - jedenfalls bis ich ihn wieder mittels true anzeigen lasse. Ist dem nicht so?
Also ich versteh leider immernoch nicht, wo da das Problem liegen könnte. Wieso ist eine änderung in jedem Schleifendurchgang den problematisch?
Wie würdest du das ganze Lösen?

6

10.08.2008, 20:50

Hab mal was gehört von wegen, manchmal müsste man ShowCursor mehrmals aufrufen. Ungefähr so: Wenn du ihn 2 mal ausblendest musst du ihn auch 2 mal wieder einblenden, damit er wieder sichtbar ist. Man kann das auch in einer Schliefe machen, anhand des Rückgabewertes von ShowCursor.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

7

10.08.2008, 20:52

Jonathan_Klein
Nonsens. Sein Problem ist, er erkennt nicht das "else" in seiner "Schleife". Das ist alles.

8

10.08.2008, 21:46

Hmm zeig mal deine Schleife :D 100% CPU Auslastung Garantie? :D
Was reicht dir an WM_LBUTTONDOWN u. WM_LBUTTONUP nicht? ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

9

10.08.2008, 21:52

Zitat von »"unsigned long"«

Jonathan_Klein
Nonsens. Sein Problem ist, er erkennt nicht das "else" in seiner "Schleife". Das ist alles.


Extra für dich nochmal im Petzold nachgelesen. ShowCursor(true) erhöht den Zähler um 1, ShowCursor(false) verringert ihn um 1, der Curosr ist sichtbar wenn der Zähler einen Wert von >=0 hat.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

10

10.08.2008, 22:09

Jonathan_Klein
Mag sein, aber wie wir alle Wissen hat sich seit Windows 2000 einiges im NT-Bereich geändert.

Werbeanzeige