|
能動的にホイールの状態を取得する |
| ダウンロード : ホイール取得サンプル(2005/03/20) |
|
#ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x0800 #endif #include <dinput.h> #pragma comment(lib, "dxguid.lib") #pragma comment(lib, "dinput8.lib") |
|
LPDIRECTINPUT8 m_pDInput; LPDIRECTINPUTDEVICE8 m_pDIDevice; |
|
m_pDInput = NULL; m_pDIDevice = NULL; |
|
// DirectInput8 インターフェースの取得 if FAILED(DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&m_pDInput, NULL )){ // DirectInput8 がありません。 return FALSE; } // マウスデバイスの取得 if FAILED(m_pDInput->CreateDevice(GUID_SysMouse, &m_pDIDevice, NULL)){ // マウスが無いかも return FALSE; } // データ形式の設定 if FAILED(m_pDIDevice->SetDataFormat(&c_dfDIMouse2)){ // 普通じゃないマウスかも return FALSE; } // 強調モードの設定 if FAILED(m_pDIDevice->SetCooperativeLevel( GetSafeHwnd(), DISCL_BACKGROUND | DISCL_NONEXCLUSIVE )){ // 既に排他モードでどこかに取られているかも return FALSE; } // バッファサイズを設定 DIPROPDWORD diprop; diprop.diph.dwSize = sizeof(diprop); diprop.diph.dwHeaderSize = sizeof(diprop.diph); diprop.diph.dwObj = 0; diprop.diph.dwHow = DIPH_DEVICE; diprop.dwData = 1000; m_pDIDevice->SetProperty(DIPROP_BUFFERSIZE, &diprop.diph); // ポーリング開始 m_pDIDevice->Acquire(); |
|
// バッファリングデータの取得 while (TRUE){ DIDEVICEOBJECTDATA od; DWORD dwItem = 1; HRESULT hr = m_pDIDevice->GetDeviceData(sizeof(od), &od, &dwItem, 0); if (hr == DIERR_INPUTLOST) // 入力ロストなら m_pDIDevice->Acquire(); // 再度確保させる else if (FAILED(hr) || dwItem == 0) break; // 読み込めない場合終了する else{ switch (od.dwOfs){ // マウスホイールの状態取得 case DIMOFS_Z: { // nMoveWheel にホイールの移動量が入る int nMoveWheel = int(od.dwData); break; } } } } |
|
#define SAFE_RELEASE(x) { if(x){ (x)->Release(); x=NULL;} } m_pDIDevice->Unacquire(); SAFE_RELEASE(m_pDIDevice); SAFE_RELEASE(m_pDInput); |