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
|
Verfasst am: 29.06.2003, 08:05 Titel: Fensterkoordinaten in API abfragen |
|
|
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 ) 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?
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 |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 29.06.2003, 08:14 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.06.2003, 08:15 Titel: |
|
|
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 |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:12 Titel: |
|
|
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
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:18 Titel: |
|
|
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 |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:29 Titel: |
|
|
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 _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:36 Titel: |
|
|
Das Minus hier kommt auf jeden Fall mal weg:
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 |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:45 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.06.2003, 09:56 Titel: |
|
|
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 |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 29.06.2003, 11:19 Titel: |
|
|
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 |
|
|
|