JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ba8039db396760f0608ef93181848b79Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Fensterkoordinaten in API abfragen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 08:05    Titel: Fensterkoordinaten in API abfragen Antworten mit Zitat

Hi,

ich bin noch ziemlich neu in der Spieleprogrammierung mit DX und wollte mal zur Übung ein kleines "2DSpiel" (naja Spiel kann mann es nicht gerade nennen Rolling Eyes ) programmieren.
Es heißt Master Mind (ihr kennt es sicherlich) und ist ganz ohne Animationen.

Am Anfang soll ein Hauptmenü kommen. Da sollen 3 Buttons zu sehen sein (Start, Highscore, Ende). Also keine Windows Button, sonder die ich selber erstellt habe. Wenn man über einen drüber mit der Maus geht, soll er eine andere Farbe bekommen. Dazu frage ich die Mauskoordinaten mit
GetCursorPos(&p) ab. Diese Funktion gibt mir aber nur die Koordinaten vom ganzen Bildschirm zurück. Mein Programm läuft aber in einem Fenster.

um konkret zu werden:

Ich will die Fensterposition wissen, damit ich sie dann von den Mauskoordinaten subtrahieren kann. Daraus müsste sich ja dann der "richtige" Wert ergeben oder? Sad
Am besten wär, wenn man das Fenster gar nicht verschieben könnte.
Wie geht das?

Und dann noch gleich eine Frage, wie kann man einen HDC initialisieren?
Das versteh ich nicht so ganz.
Da muss man noch irgend ein Fenster mit angeben oder?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 08:14    Titel: Antworten mit Zitat

versuchs mal mit :
Code:

case WM_MOUSEMOVE:
mouseX = LOWORD(lParam);
mouseY = HIWORD(lParam);
break;


wegen hdc:

Code:

HDC hDC;
lpDDSBackBuffer->GetDC(&hDC);
//farben definieren
//textausgabe
lpDDSBackBuffer->ReleaseDC(hDC);


hf gl


Zuletzt bearbeitet von DarK am 29.06.2003, 08:15, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 08:15    Titel: Antworten mit Zitat

Ich glaube das geht mit ClientToScreen, oder so ähnlich.
Ich kenne die Funktion im Zusammenhang des Zeichnens ins Fenster. Wen du ihr z.B. die Koordinaten 0;0 übergibst, dann gibt sie den Wert zurück, an dem der Fensterinhalt anfängt.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:12    Titel: Antworten mit Zitat

Das mit dem MOUSEMOVE geht jetzt, aber ich habe vergessen zu erwähnen, dass auch noch abgefragt werden muss, ob drauf geklickt wurde.

@Lord:

Meinst du das so hier Question Question Question

Code:

GetCursorPos(&p);
ClientToScreen(mm_window,&p); // p2 = {0,0}
p.x-=p2.x;
p.y-=p2.y;





Das mit dem Gerätekontext könnte doch auch so gehen oder?

Code:

HDC h;
h=GetDC(mm_window);

_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:18    Titel: Antworten mit Zitat

So ähnlich. Ich weiß jetzt nicht auswendig, wie genau die ClientToScreenfunktion funktioniert, aber sie liefert nicht die Differenz, sondern einfach den Wert der Koordinaten.
Code:
GetCursorPos(&p);
ClientToScreen(mm_window,&p);
//p.x enthält XKoordinaten im Fenster;
//p.y enthält YKoordinaten im Fenster;

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:29    Titel: Antworten mit Zitat

Ich wollte aber die Mauskoordinaten in p:

Code:

//...
case WM_LBUTTONUP:
      
      
GetCursorPos(&p);
ClientToScreen(mm_window,&p); // p2 = {0,0}
p.x-=p2.x;
p.y =p2.y;
// in p2 stehen die Fensterkoordinaten
// in p sollen die richtigen MAUSKOORDINATEN stehen
//...

So hab ich das ja schon probiert. Geht aber nicht Sad
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:36    Titel: Antworten mit Zitat

Das Minus hier kommt auf jeden Fall mal weg:
Code:
p.x-=p2.x;

Kein Wunder; p2 wird ja garnicht verändert. Wenn ClientToScreen einen Pointer zurückgibt, dan schreib doch mal:
Code:
p2=ClientToScreen(mm_window,&p);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:45    Titel: Antworten mit Zitat

ClientToScreen gibt eine Intvariable zurück, die aussagt, ob die Funktion fehlerfrei (positiver Returncode) oder fehlerhaft (negativer Returncode) gelaufen ist.

Zitat aus der Hilfe:


-----------------------------------------------------------------
The ClientToScreen function converts the client coordinates of a specified point to screen coordinates.
...
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero.
------------------------------------------------------------------
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 09:56    Titel: Antworten mit Zitat

Dann nimm eben, falls du beide Werte behalten willst, zwei Variablen:
Code:

POINTER pAllgemein;
POINTER pFenster;
GetCursorPos(&pAllgemein);

pFenster=pAllgemein;

ClientToScreen(mm_window,&pFenster);
//pFenster.x enthält XKoordinaten im Fenster;
//pFenster.y enthält YKoordinaten im Fenster;
//pAllgemein.x enthält XKoordinaten auf dem Bildschirm;
//pAllgemein.y enthält YKoordinaten auf dem Bildschirm;


_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 29.06.2003, 11:19    Titel: Antworten mit Zitat

So hab ichs ja auch schon probiert. Geht aber nicht.
Übrigens: Ich will nicht die Fensterkoordinaten merken.
Das einzige was ich am Ende will, ist eine genaue Angabe der Mauskoordinaten, auch wenn sich das Fenster bewegt.

Mehr will ich gar nicht.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum