Blame | Last modification | View Log | RSS feed
#pragma once
#include "KeyboardDevice.h"
#include "MouseDevice.h"
class MyDirectInput8 : public IDirectInput8
{
public:
MyDirectInput8(IDirectInput8* di, COverlay *o) : m_di(di), m_pOverlay(o)
{
}
/*** IUnknown methods ***/
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObj)
{
return m_di->QueryInterface(riid, ppvObj);
}
ULONG STDMETHODCALLTYPE AddRef()
{
return m_di->AddRef();
}
ULONG STDMETHODCALLTYPE Release()
{
ULONG count = m_di->Release();
if(0 == count)
delete this;
return count;
}
/*** IDirectInput8 methods ***/
STDMETHOD(CreateDevice)(REFGUID rguid, IDirectInputDevice8** device, LPUNKNOWN unknown)
{
HRESULT hr = m_di->CreateDevice(rguid, device, unknown);
if ( SUCCEEDED(hr) )
{
if ( rguid == GUID_SysKeyboard )
*device = new KeyboardDevice(*device, m_pOverlay);
else if ( rguid == GUID_SysMouse )
*device = new MouseDevice(*device, m_pOverlay);
}
return hr;
}
STDMETHOD(EnumDevices)(DWORD devType,LPDIENUMDEVICESCALLBACK callback, LPVOID ref, DWORD flags)
{
return m_di->EnumDevices(devType, callback, ref, flags);
}
STDMETHOD(GetDeviceStatus)(REFGUID rguid)
{
return m_di->GetDeviceStatus(rguid);
}
STDMETHOD(RunControlPanel)(HWND owner, DWORD flags)
{
return m_di->RunControlPanel(owner, flags);
}
STDMETHOD(Initialize)(HINSTANCE instance, DWORD version)
{
return m_di->Initialize(instance, version);
}
STDMETHOD(FindDevice)(REFGUID rguid, LPCTSTR name, LPGUID guidInstance)
{
return m_di->FindDevice(rguid, name, guidInstance);
}
STDMETHOD(EnumDevicesBySemantics)(LPCTSTR username, LPDIACTIONFORMAT action,
LPDIENUMDEVICESBYSEMANTICSCB callback, LPVOID ref, DWORD flags)
{
return m_di->EnumDevicesBySemantics(username, action, callback, ref, flags);
}
STDMETHOD(ConfigureDevices)(LPDICONFIGUREDEVICESCALLBACK callback, LPDICONFIGUREDEVICESPARAMS params,
DWORD flags, LPVOID ref)
{
return m_di->ConfigureDevices(callback, params, flags, ref);
}
private:
IDirectInput8* m_di;
COverlay *m_pOverlay;
};