Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 19.08.2003, 14:30 Titel: Mausabfrage |
|
|
Also...
Ich hab die Mausabfrage gemacht wie im Buch (altes):
Code: | void InitDirectInput(HINSTANCE hInst)
{
if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION,
IID_IDirectInput8,(void**)&lpDI,NULL)))
{
}
if(FAILED(lpDI->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL)))
{
}
// c_dfDIMouse ist eine vordefinierte Variable
if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
{
}
// Kooperationsebene festlegen
if(FAILED(lpDIMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND |
DISCL_NONEXCLUSIVE)))
{
}
hMouseEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
if(FAILED(lpDIMouse->SetEventNotification(hMouseEvent)))
{
}
ZeroMemory(&DIProperties,sizeof(DIProperties));
DIProperties.diph.dwSize = sizeof(DIPROPDWORD);
DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);
DIProperties.diph.dwObj = 0;
DIProperties.diph.dwHow = DIPH_DEVICE;
// Puffer größe festlegen
DIProperties.dwData = 16;
// Puffergröße für Mouseeingaben setzen
// bei Ereignisbehandlung zwingend notwendig
lpDIMouse->SetProperty(DIPROP_BUFFERSIZE, &DIProperties.diph);
// Zugang zur Mouse verschaffen
lpDIMouse->Acquire();
}
|
Code: | void GetMouseData()
{
DWORD NumElements = 1;
DIDEVICEOBJECTDATA data;
ZeroMemory(&data,sizeof(data));
if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),&data,&NumElements,0)))
{
// die Mouse wurde zwischenzeitlich von einer andere Anwendung genutzt,
// deshalb Kontrolle wiederholen
lpDIMouse->Acquire();
return;
}
switch(data.dwOfs)
{
case DIMOFS_X:
//if ((Mouse_X+data.dwData+16<=800)&&(Mouse_X+data.dwData>15))
Mouse_X+= data.dwData;
break;
case DIMOFS_Y:
//if ((Mouse_Y+data.dwData+23<=600)&&(Mouse_Y+data.dwData>0))
Mouse_Y+= data.dwData;
break;
case DIMOFS_BUTTON0:
break;
case DIMOFS_BUTTON1:
break;
}
} |
Aber aus irgendeinem Grund hakt die Maus ziemlich...
(siehe www.walko.de/andre/kings.zip) |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.08.2003, 14:36 Titel: |
|
|
Code: |
switch(data.dwOfs)
{
case DIMOFS_X:
//if ((Mouse_X+data.dwData+16<=800)&&(Mouse_X+data.dwData>15))
Mouse_X+= data.dwData;
break;
case DIMOFS_Y:
//if ((Mouse_Y+data.dwData+23<=600)&&(Mouse_Y+data.dwData>0))
Mouse_Y+= data.dwData;
break;
case DIMOFS_BUTTON0:
break;
case DIMOFS_BUTTON1:
break;
}
|
Mit diesem Code kann man den Cursor immer nur auf einer Achse bewegen. Nimm die switch-Anweisung raus... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 19.08.2003, 14:40 Titel: |
|
|
Also mit if, oder wie?
(Btw: Komisch, habs eigentlich schonmal genauso gemacht und das hatte funktioniert...) |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.08.2003, 14:41 Titel: |
|
|
Lass alles weg und addiere nur die Deltas. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 19.08.2003, 14:46 Titel: |
|
|
Also wenn ich bloß
Code: | Mouse_X+= data.dwData;
Mouse_Y+= data.dwData; |
nehme, dann bewegt er die Maus nur in der Diagonalen (addiert halt zu beiden, dass selbe dazu...) |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.08.2003, 15:02 Titel: |
|
|
Ich mach es mit ::GetDeviceState und benutze die struc DIMOUSESTATE.
lX : x Delta
lY : y Delta
lZ : Mausrad Delta
rgbButtons : Mausknöpfe _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 19.08.2003, 15:40 Titel: |
|
|
Hat sich erledigt...
Lag an was anderem...
Trotzdem thx. |
|
Nach oben |
|
|
|