Environment: VC6
Requires: DirectX 8 SDK
Use this class to setup and handle input from keyboard, mouse, and one joystick.
(continued)
Instructions(DI only):
- Derive a class from CDirectInput8
- Override the input processing functions for each device used: HRESULT
ProcessMouse(); HRESULT ProcessKB(); HRESULT ProcessJoy();(Don't forget to
call base function at the beginning of each function.)
- Call "InitDI(HWND hWnd, HINSTANCE hInstance, DWORD ToUse)"
- The "ToUse" can take any combination of "USEMOUSE",
"USEKEYBOARD", "USEJOYSTICK" flags depending on what
devices you want to use
Instructions(Used in conjunction with D3D8 Framework):
- Perform all steps above
- Call "HRESULT InitDeviceObjects(LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* pCursorFile =
NULL/*Cursor image file*/)" in "InitDeviceObjects" of derived
framework class
- Call "HRESULT DrawMouse(LPDIRECT3DDEVICE8 pd3dDevice)" in
"Render" of derived framework class
- Call "HRESULT DeleteDeviceObjects() in "DeleteDeviceObjects"
of derived framework class
- Call "HRESULT InvalidateDeviceObjects() in "InvalidateDeviceObjects"
of derived framework class
- Call "HRESULT RestoreDeviceObjects(LPDIRECT3DDEVICE8 pd3dDevice) in
"RestoreDeviceObjects" of derived framework class
Call ProcessMouse, ProcessKB. and/or ProcessJoy in each render loop to poll
each device
Use m_js, m_MouseState and buffer members to access joy, mouse, and
keyboard data respectively
EDIT THE CODE AS YOU NEED. NO RESTRICTIONS
Definitions (Not including implementation):
#define KEYDOWN(name, key) (name[key] & 0x80)
#define KEYUP(name, key) (!(name[key] & 0x80))
#define USEKEYBOARD 0x00000001L
#define USEMOUSE 0x00000002L
#define USEJOYSTICK 0x00000004L
struct CV2D_T1D
{
D3DXVECTOR4 p;
DWORD diffuse;
float tu;
float tv;
};
#define D3DFVF_CV2D_T1D (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX0)
inline CV2D_T1D InitCV2D_T1D( D3DXVECTOR4 p,
D3DCOLOR diffuse,
float tu, float tv)
{
CV2D_T1D v;
v.p = p;
v.diffuse = diffuse;
v.tu = tu;
v.tv = tv;
return v;
}
class CDirectInput8
{
public:
void SetHotSpot(POINT hspot);
BOOL* m_bMouseUp;
POINT* m_pMousePos;
POINT* m_pHotSpot;
LPDIRECTINPUTDEVICE8 m_pDIJoy;
LPDIRECTINPUTDEVICE8 m_pDIKeybrd;
LPDIRECTINPUTDEVICE8 m_pDIMouse;
DIJOYSTATE2 m_js;
DIMOUSESTATE2 m_MouseState;
char buffer[256];
DWORD m_dwElements;
LPDIRECTINPUT8 m_pDI;
LPDIRECT3DVERTEXBUFFER8 m_pVB;
LPDIRECT3DTEXTURE8 m_pCursorTex;
DIDEVCAPS m_DIDevCaps;
HRESULT InitDI(HWND hWnd, HINSTANCE hInstance, DWORD ToUse);
virtual HRESULT ProcessMouse();
virtual HRESULT ProcessKB();
virtual HRESULT ProcessJoy();
BOOL MButtonUp(BYTE button);
BOOL AllMouseUp();
void DIShutdown();
HRESULT InitDeviceObjects( LPDIRECT3DDEVICE8 pd3dDevice,
TCHAR* pCursorFile = NULL);
HRESULT DrawMouse(LPDIRECT3DDEVICE8 pd3dDevice);
HRESULT DeleteDeviceObjects();
HRESULT InvalidateDeviceObjects();
HRESULT RestoreDeviceObjects(LPDIRECT3DDEVICE8 pd3dDevice);
CDirectInput8();
virtual ~CDirectInput8();
protected:
HANDLE m_hMouse;
HRESULT hr;
private:
friend BOOL __stdcall EnumAxesCallback(
const DIDEVICEOBJECTINSTANCE* pdidoi,
VOID* pContext );
friend BOOL __stdcall EnumJoysticksCallback(
const DIDEVICEINSTANCE* pdidInstance,
VOID* pContext );
};
extern CDirectInput8* g_pDI8;
Downloads
Download source (includes implementation) - 5 Kb