本文整理汇总了C++中IDirectInputDevice8::GetDeviceData方法的典型用法代码示例。如果您正苦于以下问题:C++ IDirectInputDevice8::GetDeviceData方法的具体用法?C++ IDirectInputDevice8::GetDeviceData怎么用?C++ IDirectInputDevice8::GetDeviceData使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDirectInputDevice8
的用法示例。
在下文中一共展示了IDirectInputDevice8::GetDeviceData方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDeviceData
//In morrowind this only got called for keyboards when typing into the console. Probably no point in overriding it
//And so it turns out that oblivion uses this whever it's in menumode instead of just consoles. Figures.
HRESULT _stdcall GetDeviceData(DWORD a,DIDEVICEOBJECTDATA* b,DWORD* c,DWORD d) {
if (bufferedPresses.empty())
return RealDevice->GetDeviceData(a,b,c,d);
if(!b) {
DWORD temp=*c;
HRESULT hr = RealDevice->GetDeviceData(a,b,c,d);
if(c) *c=min(bufferedPresses.size(),temp);
if(!(d|DIGDD_PEEK)) while(!bufferedPresses.empty()) bufferedPresses.pop();
return hr;
}
int count=0;
while (bufferedPresses.size()) {
//Stricktly speaking, should return a buffer overflow by here, but if you do it breaks?
//Presumably, if you could mash your keyboard fast enough, no keypresses would register...
if(count==*c) return DI_OK; //DI_BUFFEROVERFLOW;
//This will not work correctly if DIGDD_PEEK is specified. afaik, it's only ever used if b == NULL
*b=bufferedPresses.front();
bufferedPresses.pop();
b+=sizeof(void*);
count++;
}
if(count==*c) return DI_OK;
//Can probably just return DI_OK here, because afaik *c is only ever 1 unless oblivion is trying to empty the buffer
*c-=count;
HRESULT hr=RealDevice->GetDeviceData(a,b,c,d);
*c+=count;
return hr;
}