Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » DirectX » Mouse abfragen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.09.2005, 19:02 Uhr
mauralix



Ich möchte ein Rechteck mittels GDI an den aktuellen Mauskoordinaten zeichnen funzt aber nicht...
Hier mein bisheriger Code


C++:


//Includes
#include <dinput.h>
#include <stdio.h>

//Libs
#pragma comment(lib,"dinput8.lib")
#pragma comment(lib,"dxguid.lib")

//Makros
#define RELEASE(x){if(x!=NULL){x->Release();x=NULL;}}
#define UNACQUIRE_AND_RELEASE(x){if(x!=NULL){x->Unacquire();x->Release();x=NULL;}}

// Prototypen
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
void InitMouse(HWND hWnd,HINSTANCE hInstance);
void CleanUp(void);
void ProcessInput(HWND hWnd);

//Globals
LPDIRECTINPUTDEVICE8 lpDIMouse=NULL;
LPDIRECTINPUT8 lpDI=NULL;

int x=0;int y=0;

//------------------ Main --------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,int nShowCmd){

WNDCLASSEX wc;

wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW);
wc.hCursor=0;
wc.hIcon=0;
wc.hIconSm=0;
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="DI";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;

RegisterClassEx(&wc);

HWND hWnd=CreateWindowEx(NULL,"DI","Direct Input",WS_OVERLAPPEDWINDOW,100,100,640,480,
                         NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,SW_SHOW);

InitMouse(hWnd,hInstance);

MSG msg={0};

while(msg.message!=WM_QUIT){

    if(PeekMessage(&msg,0,0,0,PM_REMOVE)){

        TranslateMessage(&msg);
        DispatchMessage(&msg);

    }
    else{

        ProcessInput(hWnd);
        HDC hDC=GetDC(hWnd);

        Rectangle(hDC,x,y,x+10,y+10);
        InvalidateRect(hWnd,NULL,FALSE);
        ReleaseDC(hWnd,hDC);


    }
}

UnregisterClass("DI",hInstance);
CleanUp();

return 0;
}
//---------------------------------------------------------------------------

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

    switch(msg){

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        switch(wParam){

        case VK_ESCAPE:
            PostQuitMessage(0);
            break;
        }
        break;
    }

return DefWindowProc(hWnd,msg,wParam,lParam);
}

void InitMouse(HWND hWnd,HINSTANCE hInstance){

DirectInput8Create(hInstance,DIRECTINPUT_VERSION,
                        IID_IDirectInput8,(void**)&lpDI,NULL);

lpDI->CreateDevice(GUID_SysMouse,&lpDIMouse,NULL);

  // Kooperationsebene festlegen
    lpDIMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND |
                                                  DISCL_NONEXCLUSIVE);
  

    // Struktur, die auch die Mousepuffergröße enthält
    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;
    // Puffergröße festlegen
    DIProperties.dwData            = 16;

    // Puffergröße für Mouseeingaben setzen
    lpDIMouse->SetProperty(DIPROP_BUFFERSIZE, &DIProperties.diph);
  
    // Zugang zur Mouse verschaffen
    lpDIMouse->Acquire();

}

void CleanUp(void){

RELEASE(lpDI);
UNACQUIRE_AND_RELEASE(lpDIMouse);

}

void ProcessInput(HWND hWnd){


    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 -> Kontrolle wiederholen
        lpDIMouse->Acquire();
        return;
    }
              
    // Mausbewegung bestimmen
    switch(data.dwOfs)
    {
        case DIMOFS_X:            
                 x+=data.dwData;
                
                
            break;

        case DIMOFS_Y:
                    y+=data.dwData;
                    
              
            break;

        case DIMOFS_BUTTON0:
                
                MessageBeep(100);
            break;

        case DIMOFS_BUTTON1:
              
                
            break;
    }

}




Was ist hier wohl falsch... <?>
Wäre toll wenn jemand erklären könnte wie ich Zugriff auf die Mausposition bekomme usw. wenn ich es falsch mache.
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.09.2005, 15:04 Uhr
mauralix



weiß das echt keiner???
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.09.2005, 15:56 Uhr
Oliver
S2-Pixelgeneral


Wie wärs wenn du mal sagst, was für Koordinaten rauskommen bzw. wo das Problem ist?
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.10.2005, 18:26 Uhr
mauralix



Mein Problem ist das ich nicht weiß wie ich die Koordinaten abfragen
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.10.2005, 18:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
switch(data.dwOfs)
    {
        case DIMOFS_X:            
                 x+=data.dwData;
                
                
            break;

        case DIMOFS_Y:
                    y+=data.dwData;
                    



da stehts doch, x und y sind deine coordinaten und dwData ist dann jeweils die änderung dieser
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ DirectX ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: