|
|
下面是来自樊一鹏先生的<<DirectInput 鼠标编程入门>>中的代码片段
HRESULT UpdateInputState(void)
{
DWORD i;
if(lpMouse != NULL)
{
DIDEVICEOBJECTDATA didod; // Receives buffered data
DWORD dwElements;
HRESULT hr;
while(TRUE)
{
dwElements = 1; // 每次从缓冲区中读一个数据
hr = lpMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &didod, &dwElements, 0);
if FAILED(hr)
{
// 发生了一个错误
if(hr == DIERR_INPUTLOST)
{
hr = lpMouse->Acquire(); // 试图重新取回设备
if FAILED(hr)
{
return S_FALSE; // 失败
}
}
}
else
if(elements == 1)
{
switch(didod.dwOfs)
{
case DIMOFS_X: // X 轴偏移量
// didod.dwData 里是具体偏移相对值,单位为像素
g_pCamera->walk(12.00f);
g_pCamera->getViewMatrix(&matView);
break;
case DIMOFS_Y: // Y 轴偏移量
// didod.dwData 里是具体偏移相对值,单位为像素
g_pCamera->yaw(1.0f);
g_pCamera->getViewMatrix(&matView);
break;
case DIMOFS_BUTTON0: // 0 号键(左键)状态
// didod.dwData 里是具体状态值
// 低字节最高位为 1 则表示按下
// 低字节最高位为 0 表示未按下
break;
case DIMOFS_BUTTON1: // 1 号键(右键)状态
// 同上
break;
case DIMOFS_BUTTON2: // 2 号键(中键)状态
// 同上
break;
case DIMOFS_BUTTON3: // 3 号键状态
// 同上
break;
}
}
else if (elements== 0) break; // 缓冲区读空
}
}
return S_OK;
}
其中的elements不知是什么成员,偶不懂,原文没有声明.
诸位帮忙看看这是那路神仙.
|
|