Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 24.03.2003, 16:25 Titel: |
|
|
Geht es nicht einfach das man es wie beim GDI macht???
Code: |
MouseX = LOWORD;
MouseY = HIWORD;
|
Muss man das bei DInput so kompliziert machen oder gibt es auch eine GDI ähnliche Lösung??? |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 27.03.2003, 16:51 Titel: |
|
|
AFAIK geht des net so einfach mit DirectInput. Des hat viel mehr Funktionen und isch deshalb wohl auch komplizierter. Kann gut sein, dass man mit den DirectInputfunktionen genauere Werte erzielen kann, als mit LOWORD/HIWORD; z.B. das die Maus nur um einen halben Pixel verschoben wurde Vielleicht ist der Aufbau der Funktion auch wichtig für andere Faktoren bei Mauseingaben(Force-Feedback, Polling, etc...)
Du musst übrigens schreiben:
Code: | MouseX=LOWORD(lParam);
MouseY=HIWORD(lParam); |
_________________ 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 |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 27.03.2003, 17:09 Titel: |
|
|
Ich habs mal so ähnlich wie im Buch probiert, das er zuerst bestimmte Mauswerte hat, an diese habe ich am Anfang auch die Maus mit:
gesetzt. Jetzt hab ich das so gemacht das er immer die Daten neu kriegt:
Code: | switch(data.dwOfs)
{
case DIMOFS_X:
m_iMouseX += data.dwData;
break;
case DIMOFS_Y:
m_iMouseY += data.dwData;
break;
} |
Das Problem ist bloß, das wenn ich die Werte jetzt per GDI ausgeben lassen will er das nie aktualisiert. Weiß einer woran das liegen könnte??? |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 27.03.2003, 19:03 Titel: |
|
|
Gibst du m_iMouseX aus oder data.dwData aus?
data.dwData enthält nämlich nur die Veränderung der MausKoordinaten. _________________ 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 |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 28.03.2003, 13:46 Titel: |
|
|
Nun m_iMouseX ist die Variable die ich später am Blidschirm haben will.
Und ist am Anfang auf 400. |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 28.03.2003, 14:04 Titel: |
|
|
Poste mal den Quellcode, mit dem du die Position aktualisierst. _________________ 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 |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 29.03.2003, 16:22 Titel: |
|
|
Aktualisierungsfunktion:
Code: | void DInput::getMouseInput(void)
{
DWORD NumElements = 1;
DIDEVICEOBJECTDATA data;
ZeroMemory(&data, sizeof(data));
if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
&data,
&NumElements,
0)))
{
lpDIMouse->Acquire();
return;
}
switch(data.dwOfs)
{
case DIMOFS_X:
m_iMouseX += data.dwData;
break;
case DIMOFS_Y:
m_iMouseY += data.dwData;
break;
case DIMOFS_BUTTON0:
if(data.dwData)
{
m_bButton0 = true;
}
else
{
m_bButton0 = false;
}
break;
case DIMOFS_BUTTON1:
if(data.dwData)
{
m_bButton1 = true;
}
else
{
m_bButton1 = false;
}
break;
}
}
|
Die Variablen m_iMouseY, m_iMouseX, m_bButton0 und m_bButton1 sind global dekleniert. |
|
Nach oben |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 29.03.2003, 16:24 Titel: |
|
|
Ach ja, die Variablen hol ich mir dann mit der Funktion:
Code: | int GetMouseX(void) { return m_iMouseX; } |
in die Maindatei. |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.03.2003, 17:21 Titel: |
|
|
Hmm...
ich kann in deinem Code keinen Fehler entdecken. Aber versuch doch mal zu prüfen, ob der Fall data.dwOfs==DIMOFS_X oder data.dwOfs==DIMOFS_Y überhaupt auftritt.
z.B.
Code: | case DIMOFS_X:
m_iMouseX += data.dwData;
PostQuitMessage(0);
//Falls Objekte nicht im Destruktor freigegeben werden,
//hier manuell freigeben
break; |
^^Das könnte nämlich sein, da die Funktion immer nur den ersten Eintrag aus dem Puffer liest(s.S.365)  _________________ 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 |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 29.03.2003, 18:21 Titel: |
|
|
Hmm, stimmt, der nimmt den Mauszeiger gar nicht wahr, der Test mit der PostQuitMessage(0) hat aufjeden FAll nicht funktioniert. Aber was muss man da machen, damit es funktioniert?? |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.03.2003, 20:43 Titel: |
|
|
Mir is noch was aufgefallen!
Prüf doch mal an der Stelle(bzw. nach der Stelle):
Code: | if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
&data,
&NumElements,
0)))
{
lpDIMouse->Acquire();
return;
} |
Es könnte nämlich auch sein, dass GetDeviceData fehlgeschlagen ist und dass die Funktion durch return wieder verlassen wird. So wird die switch-Anweisung garnich erst ausgeführt. _________________ 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 |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 30.03.2003, 09:46 Titel: |
|
|
Ich hab des jetzt mal so getestet:
Code: |
if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
&data, &NumElements, 0)))
{
lpDIMouse->Acquire();
PostQuitMessage(0);
} |
Aber er beendet das Programm nicht, was ja eigentlich heißen sollte das es funktioniert. |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 30.03.2003, 10:06 Titel: |
|
|
Ja, eigentlich schon. Es könnte vielleicht sein, dass etwas an der Initialisierung von DirectInput nicht stimmt. Poste mal den Code. _________________ 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 |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 30.03.2003, 11:16 Titel: |
|
|
Das Problem ist doch immer noch, dass die Werte nicht aktualisiert ausgegeben werden, oder? Sorgst du denn dafür, dass der Fensterinhalt neu gezeichnet wird?
Christian |
|
Nach oben |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 30.03.2003, 11:21 Titel: |
|
|
Klar lass ich den Fensterinhalt aktualisieren, ich hab nämlich auch ein Bild das ich per Tastatur bewegen kann, und da wird die alte Position ja auch gelöscht. Mein Initialisierungscode:
Code: |
//DInputCreate
if(FAILED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8,(void**)&lpDI,NULL)))
{
return Error("Fehler beim Anlegen des DirectInput8-Objekts");
}
//Mausinitialisierung
if(FAILED(lpDI->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL)))
{
return Error("Fehler beim Anlegen des Maus-Devices!");
}
if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
{
return Error("Fehler beim Setzen des Datenformats!");
}
if(FAILED(lpDIMouse->SetCooperativeLevel(hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
{
return Error("Fehler beim Setzen der Kooperationsebene!");
}
DIPROPDWORD DIProperties;
ZeroMemory(&DIProperties, sizeof(DIProperties));
DIProperties.diph.dwSize = sizeof(DIPROPDWORD);
DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);
DIProperties.diph.dwObj = 0;
DIProperties.diph.dwHow = DIPH_DEVICE;
DIProperties.dwData = 16;
lpDIMouse->SetProperty(DIPROP_BUFFERSIZE, &DIProperties.diph);
lpDIMouse->Acquire();
|
|
|
Nach oben |
|
 |
|