// =======================================-====================================
 // Filename: DIMouse.h
 // Description: Header file for the DirectInput Mouse class
 //
 // This code corresponds to DirectX Techniques Series 1 Tutorial 5, at
 // www.32bits.co.uk
 // ============================================================================

 // Required when building this DX8 app on a DX9 SDK
 #ifndef DIRECTINPUT_VERSION 
 #define DIRECTINPUT_VERSION 0x0800
 #endif

 #include <dinput.h>
 #include <d3d9.h>
 #include "D3DFuncs.h"

 #pragma once

 #ifndef _DIMOUSE_H
 #define _DIMOUSE_H


 // We only use the left
 #define DIMOUSE_LEFTBUTTON      0
 #define DIMOUSE_RIGHTBUTTON     1
 #define DIMOUSE_MIDDLEBUTTON    2


 class CDIMouse
 {
 public:
     CDIMouse();
     ~CDIMouse();

     HRESULT Initialise(HWND hWnd, int iWindowWidth, int iWindowHeight);

     BOOL    Update();                                   // Called every frame to poll the mouse for data
     HRESULT Render(LPDIRECT3DDEVICE9 pDevice);          // Renders the mouse cursor sprite

     int GetRelativeX();                                 // Doesn't include hotspot
     int GetRelativeY();                                 // Doesn't include hotspot
     int GetAbsoluteX();                                 // Doesn't include hotspot
     int GetAbsoluteY();                                 // Doesn't include hotspot
     void GetAbsolutePos(POINT* kMousePos=NULL);         // Includes hotspot (for hit testing)

     void SetHotSpot(int iX, int iY);

     // Returns true if button is down. If kClickPoint != NULL, it's set to the pixel pos on screen of the hotspot
     BOOL IsMouseButtonDown(int iButton, POINT* kClickPoint=NULL);


 private:
     LPDIRECTINPUT8          m_pDIObject;
     LPDIRECTINPUTDEVICE8    m_pDIMouseDevice;


     int                     m_iWindowWidth;
     int                     m_iWindowHeight;

     DIMOUSESTATE            m_kMouseState;

     int                     m_iCursorX;
     int                     m_iCursorY;
     int                     m_iHotSpotX;
     int                     m_iHotSpotY;

 };

 #endif // _DIMOUSE_H