|
|
我看了下SDK,大概的代码是:
LPDIRECTINPUT8 lpdi =NULL;
LPDIRECTINPUTDEVICE lpdijoystick = NULL;
int Init_Joysticks()
{
CreateDirectInput8(xxx,xxx,&lpdi,xxx);
lpdi->EnumDevice(xxx,Enum_Joysticks,NULL,xxx);
if(NULL == lpdijoystick)
MessageBox(NULL,"joystick not found","joystick not found",MB_OK);
return(1);
}
BOOL CALLBACK Enum_Joysticks(xxx,xxx)
{
lpdi->CreateDevice(xxx,xxx,&lpdijoystick,xxx);
xxx;
xxx;
return(xxx);
}
我是这么理解的:direct input 接口调用EnumDevice函数后,WINDOWS系统按照EnumDevice函数的参数查找与之对应的设备,如果找到一个设备,则调用一次自定义回调函数Enum_Joysticks,
并把WINDOWS找到的相关信息写进Enum_Joysticks的第一个参数;而Enum_Joysticks函数将将返回值(是否继续查找)传给操作系统,再由操作系统把自定义枚举函数的第二个参数值传给EnumDevice函数的第三个参数.
也就是说,如果系统没有找到EnumDevice参数中说明的设备,则不会调用自定义的回调函数.
不知道我这么理解对不对?请大虾指点. |
|