本文整理汇总了C++中IDirectInputDevice8::GetDeviceState方法的典型用法代码示例。如果您正苦于以下问题:C++ IDirectInputDevice8::GetDeviceState方法的具体用法?C++ IDirectInputDevice8::GetDeviceState怎么用?C++ IDirectInputDevice8::GetDeviceState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDirectInputDevice8
的用法示例。
在下文中一共展示了IDirectInputDevice8::GetDeviceState方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDeviceState
HRESULT _stdcall GetDeviceState(DWORD a,LPVOID b) {
if(DeviceType==kDeviceType_KEYBOARD) {
//This is a keyboard, so get a list of bytes (Dont forget the mouse too)
BYTE bytes[kMaxMacros];
HRESULT hr=RealDevice->GetDeviceState(256,bytes);
if(hr!=DI_OK) return hr;
CopyMemory(&bytes[256],&DI_data.MouseOut,10);
//Get any extra key presses
DI_data.GlobalHammer = !DI_data.GlobalHammer;
BYTE * hammerList = DI_data.GlobalHammer ? DI_data.HammerStates : DI_data.AHammerStates;
for(DWORD byte=0;byte<kMaxMacros-2;byte++)
{
if(!ShouldIgnoreKey(byte))
bytes[byte] |= hammerList[byte];
}
for(DWORD byte=0;byte<256;byte++) {
if(!ShouldIgnoreKey(byte))
{
bytes[byte]|=DI_data.FakeStates[byte];
bytes[byte]&=DI_data.DisallowStates[byte];
}
if(DI_data.TapStates[byte]) {
bytes[byte]=0x80;
DI_data.TapStates[byte]=0;
}
}
for(DWORD byte=256;byte<kMaxMacros-2;byte++) bytes[byte]|=DI_data.FakeStates[byte];
::CopyMemory(b,bytes,a);
::CopyMemory(DI_data.LastBytes,bytes,kMaxMacros);
::CopyMemory(DI_data.MouseIn,&bytes[256],10);
return DI_OK;
} else {
//This is a mouse
//measure length of last frame
DWORD time=GetTickCount();
fps_LastFrameLength=(float)(time-fps_LastTime)/1000.0f;
fps_LastTime=time;
fps_FrameTimeHistory[fps_FrameTimeHistoryIdx] = fps_LastFrameLength;
if(fps_FrameTimeHistoryIdx < kFrameTimeHistoryLength)
fps_FrameTimeHistoryIdx++;
else
fps_FrameTimeHistoryIdx = 0;
if(fps_FrameTimeHistoryNum < kFrameTimeHistoryLength)
fps_FrameTimeHistoryNum++;
else
{
float total = 0;
for(UInt32 i = 0; i < kFrameTimeHistoryLength; i++)
total += fps_FrameTimeHistory[i];
total /= ((float)kFrameTimeHistoryLength);
fps_AverageFrameTime = total;
}
//Mouse control gunk
DIMOUSESTATE2* MouseState=(DIMOUSESTATE2*)b;
HRESULT hr=RealDevice->GetDeviceState(sizeof(DIMOUSESTATE2),MouseState);
if(hr!=DI_OK) return hr;
if(MouseState->lZ>0) {
DI_data.MouseOut[8]=0x80;
DI_data.MouseOut[9]=0;
} else if(MouseState->lZ<0) {
DI_data.MouseOut[8]=0;
DI_data.MouseOut[9]=0x80;
} else {
DI_data.MouseOut[8]=0;
DI_data.MouseOut[9]=0;
}
if(DI_data.MouseDisable) {
MouseState->lX=0;
MouseState->lY=0;
}
if(DI_data.MouseXMov) {
MouseState->lX+=DI_data.MouseXMov;
DI_data.MouseXMov=0;
}
if(DI_data.MouseYMov) {
MouseState->lY+=DI_data.MouseYMov;
DI_data.MouseYMov=0;
}
if(DI_data.MouseXSpeed) {
float move=DI_data.MouseXSpeed*fps_LastFrameLength;
MouseState->lX+=(long)move;
if(DI_data.MouseXSpeed>0) {
DI_data.MouseXLeft+=fmodf(move,1.0f);
if(DI_data.MouseXLeft>1) {
MouseState->lX+=1;
DI_data.MouseXLeft-=1;
//.........这里部分代码省略.........