공룡호가 사는 세상 이야기

마우스의 장치 생성이 모두 완료된 다음,
g_lpDIMouse->Acquire(); 로 엑세스 권한을 취득하면,
DIMOUSESTATE 구조체를 이용하여 변수를 생성한다.

DIMOUSESTATE mousestate;

이 구조체는 최대 4개의 버튼을 가지는 마우스의 상태, 마우스와 함께 액세스 되는 그 외의 장치 상태를 정의한다. 이 구조체는 IDirectInputDevice8::GetDeviceState 메서드로 사용한다.

typedef struct DIMOUSESTATE {
     LONG lx;
     LONG ly;
     LONG lz;
     BYTE rgbButtons[4];
} DIMOUSESTATE, *LPDIMOUSESTATE;

순서대로, x축, y축을 나타내며 lz는 휠을 나타내나 휠이 없을경우 0를 가진다.
rgbButton은 버튼의 배열이며, 바이트의 상위비트는, 해당 버튼이 다운상태에 있을때 설정됨.
버튼 다운 메시지 확인은 다음과 같다.

mousestate.rgbButton[0] & 0x80      //좌측버튼
mousestate.rgbButton[1] & 0x80      //우측버튼
mousestate.rgbButton[2] & 0x80      //가운데

해당 연산의 결과가 0이아닌 값, 즉 참(true)값이 나오면 해당 버튼의 다운 메시지 발생.