| 11 | cycrow | 1 | #pragma once
 | 
        
           |  |  | 2 |   | 
        
           |  |  | 3 | #include "KeyboardDevice.h"
 | 
        
           |  |  | 4 | #include "MouseDevice.h"
 | 
        
           |  |  | 5 |   | 
        
           |  |  | 6 | class MyDirectInput8 : public IDirectInput8
 | 
        
           |  |  | 7 | {
 | 
        
           |  |  | 8 | public:
 | 
        
           |  |  | 9 | 	MyDirectInput8(IDirectInput8* di, COverlay *o) : m_di(di), m_pOverlay(o)
 | 
        
           |  |  | 10 | 	{
 | 
        
           |  |  | 11 | 	}
 | 
        
           |  |  | 12 |   | 
        
           |  |  | 13 | 	/*** IUnknown methods ***/
 | 
        
           |  |  | 14 |     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObj)
 | 
        
           |  |  | 15 | 	{
 | 
        
           |  |  | 16 | 		return m_di->QueryInterface(riid, ppvObj);
 | 
        
           |  |  | 17 | 	}
 | 
        
           |  |  | 18 |   | 
        
           |  |  | 19 |     ULONG STDMETHODCALLTYPE AddRef()
 | 
        
           |  |  | 20 | 	{
 | 
        
           |  |  | 21 | 		return m_di->AddRef();
 | 
        
           |  |  | 22 | 	}
 | 
        
           |  |  | 23 |   | 
        
           |  |  | 24 |     ULONG STDMETHODCALLTYPE Release()
 | 
        
           |  |  | 25 | 	{
 | 
        
           |  |  | 26 | 		ULONG count = m_di->Release();
 | 
        
           |  |  | 27 | 		if(0 == count)
 | 
        
           |  |  | 28 | 			delete this;
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 | 		return count;
 | 
        
           |  |  | 31 | 	}
 | 
        
           |  |  | 32 |   | 
        
           |  |  | 33 |     /*** IDirectInput8 methods ***/
 | 
        
           |  |  | 34 |     STDMETHOD(CreateDevice)(REFGUID rguid, IDirectInputDevice8** device, LPUNKNOWN unknown)
 | 
        
           |  |  | 35 | 	{
 | 
        
           |  |  | 36 | 		HRESULT hr = m_di->CreateDevice(rguid, device, unknown);
 | 
        
           |  |  | 37 | 		if ( SUCCEEDED(hr) )
 | 
        
           |  |  | 38 | 		{
 | 
        
           |  |  | 39 | 			if ( rguid == GUID_SysKeyboard )
 | 
        
           |  |  | 40 | 				*device = new KeyboardDevice(*device, m_pOverlay);
 | 
        
           |  |  | 41 | 			else if ( rguid == GUID_SysMouse )
 | 
        
           |  |  | 42 | 				*device = new MouseDevice(*device, m_pOverlay);
 | 
        
           |  |  | 43 | 		}
 | 
        
           |  |  | 44 |   | 
        
           |  |  | 45 | 		return hr;
 | 
        
           |  |  | 46 | 	}
 | 
        
           |  |  | 47 |   | 
        
           |  |  | 48 |     STDMETHOD(EnumDevices)(DWORD devType,LPDIENUMDEVICESCALLBACK callback, LPVOID ref, DWORD flags)
 | 
        
           |  |  | 49 | 	{
 | 
        
           |  |  | 50 | 		return m_di->EnumDevices(devType, callback, ref, flags);
 | 
        
           |  |  | 51 | 	}
 | 
        
           |  |  | 52 |   | 
        
           |  |  | 53 |     STDMETHOD(GetDeviceStatus)(REFGUID rguid)
 | 
        
           |  |  | 54 | 	{
 | 
        
           |  |  | 55 | 		return m_di->GetDeviceStatus(rguid);
 | 
        
           |  |  | 56 | 	}
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 |     STDMETHOD(RunControlPanel)(HWND owner, DWORD flags)
 | 
        
           |  |  | 59 | 	{
 | 
        
           |  |  | 60 | 		return m_di->RunControlPanel(owner, flags);
 | 
        
           |  |  | 61 | 	}
 | 
        
           |  |  | 62 |   | 
        
           |  |  | 63 |     STDMETHOD(Initialize)(HINSTANCE instance, DWORD version)
 | 
        
           |  |  | 64 | 	{
 | 
        
           |  |  | 65 | 		return m_di->Initialize(instance, version);
 | 
        
           |  |  | 66 | 	}
 | 
        
           |  |  | 67 |   | 
        
           |  |  | 68 |     STDMETHOD(FindDevice)(REFGUID rguid, LPCTSTR name, LPGUID guidInstance)
 | 
        
           |  |  | 69 | 	{
 | 
        
           |  |  | 70 | 		return m_di->FindDevice(rguid, name, guidInstance);
 | 
        
           |  |  | 71 | 	}
 | 
        
           |  |  | 72 |   | 
        
           |  |  | 73 |     STDMETHOD(EnumDevicesBySemantics)(LPCTSTR username, LPDIACTIONFORMAT action,
 | 
        
           |  |  | 74 | 		LPDIENUMDEVICESBYSEMANTICSCB callback, LPVOID ref, DWORD flags)
 | 
        
           |  |  | 75 | 	{
 | 
        
           |  |  | 76 | 		return m_di->EnumDevicesBySemantics(username, action, callback, ref, flags);
 | 
        
           |  |  | 77 | 	}
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 |     STDMETHOD(ConfigureDevices)(LPDICONFIGUREDEVICESCALLBACK callback, LPDICONFIGUREDEVICESPARAMS params,
 | 
        
           |  |  | 80 | 		DWORD flags, LPVOID ref)
 | 
        
           |  |  | 81 | 	{
 | 
        
           |  |  | 82 | 		return m_di->ConfigureDevices(callback, params, flags, ref);
 | 
        
           |  |  | 83 | 	}
 | 
        
           |  |  | 84 |   | 
        
           |  |  | 85 | private:
 | 
        
           |  |  | 86 | 	IDirectInput8* m_di;
 | 
        
           |  |  | 87 | 	COverlay *m_pOverlay;
 | 
        
           |  |  | 88 | };
 |