|
|
LPDIRECTINPUT8 didxzz= NULL;//DirectInput对象指针
LPDIRECTINPUTDEVICE8 di=0;//DirectInput设备指针 键盘
LPDIRECTINPUTDEVICE8 disb=0;//DirectInput设备指针 鼠标
//创建DI对象P115
DirectInput8Create(cxjb,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&didxzz,0);
//创建DI设备P117
didxzz->CreateDevice(GUID_SysKeyboard,&di,0);//键盘
didxzz->CreateDevice(GUID_SysMouse,&disb,0);//鼠标
//设置DI数据格式P118
di->SetDataFormat(&c_dfDIKeyboard);//键盘
disb->SetDataFormat(&c_dfDIMouse);//鼠标
//设置DI的协调级别P119
di->SetCooperativeLevel(ckjb,DISCL_FOREGROUND|DISCL_EXCLUSIVE);
disb->SetCooperativeLevel(ckjb,DISCL_FOREGROUND|DISCL_EXCLUSIVE);
//设置鼠标设备属性121
DIPROPDWORD dipROPWORD;
dipROPWORD.diph.dwSize=sizeof(DIPROPDWORD);
dipROPWORD.diph.dwHeaderSize=sizeof(DIPROPHEADER);
dipROPWORD.diph.dwObj=0;
dipROPWORD.diph.dwHow=DIPH_DEVICE;
dipROPWORD.dwData=10;
disb->SetProperty(DIPROP_BUFFERSIZE,&dipROPWORD.diph);
//获取输入设备的访问权
di->Acquire();
disb->Acquire();
//读取鼠标数据
void shubiao()
{
ZeroMemory(sbhcq,sizeof(DIDEVICEOBJECTDATA)*10);
for(i=0;i<10;i++)
{
//请问GetDeviceData为什么要调用两次?书上的流程就是这样的,没说明。
disb->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),&sbhcq,&dwReadNum,0);
disb->Acquire();
disb->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),&sbhcq,&dwReadNum,0);
//这里累加鼠标X方向移动距离,结果错误。
if(sbhcq.dwOfs==DIMOFS_X){
dd[20]=dd[20]+sbhcq.dwData;
}
if(sbhcq.dwOfs==DIMOFS_Y){
dd[21]=dd[21]+sbhcq.dwData;
}
}
zj[0]=zj[0]+float(dd[20]);
} |
|