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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

03.06.2009, 22:25

Warum verwendest du zur Cursortransformation nicht einfach das RECT das dir GetClientRect() für dein Fenster liefert!?

Im Windowed Mode würd ich die BackBuffer Abmessungen sowieso auf 0 setzen damit D3D sie auf den ClientBereich festlegt und nichts gestreckt wird...

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

12

03.06.2009, 22:26

Das Ergebnis damit ist haargenau das selbe. Hab ich schon ausprobiert.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

03.06.2009, 22:28

Zeig mal etwas Code zu deiner Umrechnung atm...

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

14

03.06.2009, 22:32

Hm oke das Ergenibs ist nicht gleich, es ist schlechter.

C-/C++-Quelltext

1
2
3
4
5
6
POINT Point;
GetCursorPos(&Point);
RECT r;
GetWindowRect(g_hWnd, &r);
Point.x = Point.x - r.left;
Point.y = Point.y - r.top;


Weil ich gesagt hab, dass selbstgesetzte Cursor wieder verschwinden machmal: Ich hab SetCursor(LoadCursorFromFile("cursor.ani")); verwendet. Nachdems verschwunden ist, hab ich versucht das auf die Windowsnachrichten WM_SETCURSOR einzustellen - hat aber nix geändert.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

03.06.2009, 22:35

Du solltest GetClientRect() verwenden und nicht GetWindowRect()!
Und du solltest auch die Breite/Höhe des ClientRect zur Skalierung auf deine Einheitsauflösung verwenden und nicht die des BackBuffer...

Wenn du deine Mauskoordinaten im -1..1 Bereich haben willst könnte das z.B. so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
POINT Point; 
GetCursorPos(&Point); 
RECT cr; 
GetClientRect(g_hWnd, &cr); 
float x = 2.0f * Point.x / cr.right - 1.0f;
float y = 2.0f * Point.y / cr.bottom - 1.0f;

// maps to:

//

//              y

//

//              ^

//              |

//             1.0

//       +-------------+

//       |      |      |

//       |      |      |

//       |      |      |

//     -1.0     |     1.0

//   ----|------+------|---> x

//       |      |      |

//       |      |      |

//       |      |      |

//       +-------------+

//            -1.0

//              |

//              |

//

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

16

03.06.2009, 22:56

Danke für deine großzügige Hilfe.
Hab jetzt alles so gemacht wie dus gesagt hast.
Aber ich denk ich schau mir das ganz lieber morgen nochmal an - das will irgendwie nach wie vor nicht so recht. Wahrscheinlich mach ich irgendeinen ganz banalen dummen Fehler der mir dann im Traum einfällt. Wie sonst halt auch :D

EDIT: Oke soviel dazu... ne kurze Pause hat gereicht. Nach so langer Zeit in der ich schon Programmier müsst ichs eignetlich besser wissen :D
Funktioniert jetzt jedenfalls endlich, danke nochmal :)

Werbeanzeige