graphic-directx-game-10-DiffuseCubeDemo-DirectInput.cpp / cpp
//============================================================================= // DirectInput.cpp by Frank Luna (C) 2005 All Rights Reserved. //============================================================================= include <d3dUtil.h> include <DirectInput.h> include <d3dApp.h> DirectInput* gDInput = 0; DirectInput::DirectInput(DWORD keyboardCoopFlags, DWORD mouseCoopFlags) { ZeroMemory(mKeyboardState, sizeof(mKeyboardState)); ZeroMemory(&mMouseState, sizeof(mMouseState)); HR(DirectInput8Create(gd3dApp->getAppInst(), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&mDInput, 0)); HR(mDInput->CreateDevice(GUID_SysKeyboard, &mKeyboard, 0)); HR(mKeyboard->SetDataFormat(&c_dfDIKeyboard)); HR(mKeyboard->SetCooperativeLevel(gd3dApp->getMainWnd(), keyboardCoopFlags)); HR(mKeyboard->Acquire()); HR(mDInput->CreateDevice(GUID_SysMouse, &mMouse, 0)); HR(mMouse->SetDataFormat(&c_dfDIMouse2)); HR(mMouse->SetCooperativeLevel(gd3dApp->getMainWnd(), mouseCoopFlags)); HR(mMouse->Acquire()); } DirectInput::~DirectInput() { ReleaseCOM(mDInput); mKeyboard->Unacquire(); mMouse->Unacquire(); ReleaseCOM(mKeyboard); ReleaseCOM(mMouse); } void DirectInput::poll() { // Poll keyboard. HRESULT hr = mKeyboard->GetDeviceState(sizeof(mKeyboardState), (void**)&mKeyboardState); if( FAILED(hr) ) { // Keyboard lost, zero out keyboard data structure. ZeroMemory(mKeyboardState, sizeof(mKeyboardState)); // Try to acquire for next time we poll. hr = mKeyboard->Acquire(); } // Poll mouse. hr = mMouse->GetDeviceState(sizeof(DIMOUSESTATE2), (void**)&mMouseState); if( FAILED(hr) ) { // Mouse lost, zero out mouse data structure. ZeroMemory(&mMouseState, sizeof(mMouseState)); // Try to acquire for next time we poll. hr = mMouse->Acquire(); } } bool DirectInput::keyDown(char key) { return (mKeyboardState[key] & 0x80) != 0; } bool DirectInput::mouseButtonDown(int button) { return (mMouseState.rgbButtons[button] & 0x80) != 0; } float DirectInput::mouseDX() { return (float)mMouseState.lX; } float DirectInput::mouseDY() { return (float)mMouseState.lY; } float DirectInput::mouseDZ() { return (float)mMouseState.lZ; }
(C) Æliens 20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.