⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 3 页
字号:
      *entries += span;      len -= span;    }  }  if (!(flags & DIGDD_PEEK))    This->queue_tail = nqtail;  LeaveCriticalSection(&(This->crit));  /* Check if we need to do a mouse warping */  if (This->need_warp == WARP_NEEDED) {    dinput_window_check(This);    TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y);    SetCursorPos( This->mapped_center.x, This->mapped_center.y );#ifdef MOUSE_HACK    This->need_warp = WARP_DONE;#else    This->need_warp = WARP_STARTED;#endif  }  return DI_OK;}/******************************************************************************  *     SetProperty : change input device properties  */static HRESULT WINAPI SysMouseAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,					    REFGUID rguid,					    LPCDIPROPHEADER ph){  ICOM_THIS(SysMouseImpl,iface);  TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);  if (!HIWORD(rguid)) {    switch ((DWORD)rguid) {    case (DWORD) DIPROP_BUFFERSIZE: {      LPCDIPROPDWORD	pd = (LPCDIPROPDWORD)ph;      TRACE("buffersize = %ld\n",pd->dwData);      This->data_queue = (LPDIDEVICEOBJECTDATA)HeapAlloc(GetProcessHeap(),0,							  pd->dwData * sizeof(DIDEVICEOBJECTDATA));      This->queue_head = 0;      This->queue_tail = 0;      This->queue_len  = pd->dwData;      break;    }    case (DWORD) DIPROP_AXISMODE: {      LPCDIPROPDWORD    pd = (LPCDIPROPDWORD)ph;      This->absolute = !(pd->dwData);      TRACE("Using %s coordinates mode now\n", This->absolute ? "absolute" : "relative");      break;    }    default:      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));      break;    }  }  return DI_OK;}/******************************************************************************  *     GetProperty : get input device properties  */static HRESULT WINAPI SysMouseAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,						REFGUID rguid,						LPDIPROPHEADER pdiph){  ICOM_THIS(SysMouseImpl,iface);  TRACE("(this=%p,%s,%p): stub!\n",	iface, debugstr_guid(rguid), pdiph);  if (TRACE_ON(dinput))    _dump_DIPROPHEADER(pdiph);  if (!HIWORD(rguid)) {    switch ((DWORD)rguid) {    case (DWORD) DIPROP_BUFFERSIZE: {      LPDIPROPDWORD	pd = (LPDIPROPDWORD)pdiph;      TRACE(" return buffersize = %d\n",This->queue_len);      pd->dwData = This->queue_len;      break;    }    case (DWORD) DIPROP_GRANULARITY: {      LPDIPROPDWORD pr = (LPDIPROPDWORD) pdiph;      /* We'll just assume that the app asks about the Z axis */      pr->dwData = WHEEL_DELTA;      break;    }    case (DWORD) DIPROP_RANGE: {      LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph;      if ((pdiph->dwHow == DIPH_BYID) &&	  ((pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS)) ||	   (pdiph->dwObj == (DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS)))) {	/* Querying the range of either the X or the Y axis.  As I do	   not know the range, do as if the range were	   unrestricted...*/	pr->lMin = DIPROPRANGE_NOMIN;	pr->lMax = DIPROPRANGE_NOMAX;      }      break;    }    default:      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));      break;    }  }  return DI_OK;}/******************************************************************************  *     SetEventNotification : specifies event to be sent on state change  */static HRESULT WINAPI SysMouseAImpl_SetEventNotification(LPDIRECTINPUTDEVICE8A iface,							 HANDLE hnd) {  ICOM_THIS(SysMouseImpl,iface);  TRACE("(this=%p,0x%08lx)\n",This,(DWORD)hnd);  This->hEvent = hnd;  return DI_OK;}/******************************************************************************  *     GetCapabilities : get the device capablitites  */static HRESULT WINAPI SysMouseAImpl_GetCapabilities(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVCAPS lpDIDevCaps){  ICOM_THIS(SysMouseImpl,iface);  TRACE("(this=%p,%p)\n",This,lpDIDevCaps);  if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {    lpDIDevCaps->dwFlags = DIDC_ATTACHED;    if (This->dinput->version >= 8)        lpDIDevCaps->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);    else        lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);    lpDIDevCaps->dwAxes = 3;    lpDIDevCaps->dwButtons = 3;    lpDIDevCaps->dwPOVs = 0;    lpDIDevCaps->dwFFSamplePeriod = 0;    lpDIDevCaps->dwFFMinTimeResolution = 0;    lpDIDevCaps->dwFirmwareRevision = 100;    lpDIDevCaps->dwHardwareRevision = 100;    lpDIDevCaps->dwFFDriverVersion = 0;  } else {    /* DirectX 3.0 */    FIXME("DirectX 3.0 not supported....\n");  }  return DI_OK;}/******************************************************************************  *     EnumObjects : enumerate the different buttons and axis...  */static HRESULT WINAPI SysMouseAImpl_EnumObjects(	LPDIRECTINPUTDEVICE8A iface,	LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback,	LPVOID lpvRef,	DWORD dwFlags){  ICOM_THIS(SysMouseImpl,iface);  DIDEVICEOBJECTINSTANCEA ddoi;  TRACE("(this=%p,%p,%p,%08lx)\n", This, lpCallback, lpvRef, dwFlags);  if (TRACE_ON(dinput)) {    TRACE("  - flags = ");    _dump_EnumObjects_flags(dwFlags);    TRACE("\n");  }  /* Only the fields till dwFFMaxForce are relevant */  memset(&ddoi, 0, sizeof(ddoi));  ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);  /* In a mouse, we have : two relative axis and three buttons */  if ((dwFlags == DIDFT_ALL) ||      (dwFlags & DIDFT_AXIS)) {    /* X axis */    ddoi.guidType = GUID_XAxis;    ddoi.dwOfs = This->offset_array[WINE_MOUSE_X_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS;    strcpy(ddoi.tszName, "X-Axis");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    /* Y axis */    ddoi.guidType = GUID_YAxis;    ddoi.dwOfs = This->offset_array[WINE_MOUSE_Y_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS;    strcpy(ddoi.tszName, "Y-Axis");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    /* Z axis */    ddoi.guidType = GUID_ZAxis;    ddoi.dwOfs = This->offset_array[WINE_MOUSE_Z_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS;    strcpy(ddoi.tszName, "Z-Axis");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;  }  if ((dwFlags == DIDFT_ALL) ||      (dwFlags & DIDFT_BUTTON)) {    ddoi.guidType = GUID_Button;    /* Left button */    ddoi.dwOfs = This->offset_array[WINE_MOUSE_L_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_L_BUTTON_INSTANCE) | DIDFT_PSHBUTTON;    strcpy(ddoi.tszName, "Left-Button");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    /* Right button */    ddoi.dwOfs = This->offset_array[WINE_MOUSE_R_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_R_BUTTON_INSTANCE) | DIDFT_PSHBUTTON;    strcpy(ddoi.tszName, "Right-Button");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    /* Middle button */    ddoi.dwOfs = This->offset_array[WINE_MOUSE_M_POSITION];    ddoi.dwType = DIDFT_MAKEINSTANCE(WINE_MOUSE_M_BUTTON_INSTANCE) | DIDFT_PSHBUTTON;    strcpy(ddoi.tszName, "Middle-Button");    _dump_OBJECTINSTANCEA(&ddoi);    if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;  }  return DI_OK;}static HRESULT WINAPI SysMouseWImpl_EnumObjects(LPDIRECTINPUTDEVICE8W iface, LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback,	LPVOID lpvRef,DWORD dwFlags){  ICOM_THIS(SysMouseImpl,iface);  device_enumobjects_AtoWcb_data data;  data.lpCallBack = lpCallback;  data.lpvRef = lpvRef;  return SysMouseAImpl_EnumObjects((LPDIRECTINPUTDEVICE8A) This, (LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW, (LPVOID) &data, dwFlags);}/******************************************************************************  *     GetDeviceInfo : get information about a device's identity  */static HRESULT WINAPI SysMouseAImpl_GetDeviceInfo(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVICEINSTANCEA pdidi){    ICOM_THIS(SysMouseImpl,iface);    TRACE("(this=%p,%p)\n", This, pdidi);    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {        WARN(" dinput3 not supporte yet...\n");	return DI_OK;    }    fill_mouse_dideviceinstanceA(pdidi, This->dinput->version);        return DI_OK;}static HRESULT WINAPI SysMouseWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface, LPDIDEVICEINSTANCEW pdidi){    ICOM_THIS(SysMouseImpl,iface);    TRACE("(this=%p,%p)\n", This, pdidi);    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {        WARN(" dinput3 not supporte yet...\n");	return DI_OK;    }    fill_mouse_dideviceinstanceW(pdidi, This->dinput->version);        return DI_OK;}static ICOM_VTABLE(IDirectInputDevice8A) SysMouseAvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2AImpl_QueryInterface,	IDirectInputDevice2AImpl_AddRef,	SysMouseAImpl_Release,	SysMouseAImpl_GetCapabilities,	SysMouseAImpl_EnumObjects,	SysMouseAImpl_GetProperty,	SysMouseAImpl_SetProperty,	SysMouseAImpl_Acquire,	SysMouseAImpl_Unacquire,	SysMouseAImpl_GetDeviceState,	SysMouseAImpl_GetDeviceData,	SysMouseAImpl_SetDataFormat,	SysMouseAImpl_SetEventNotification,	SysMouseAImpl_SetCooperativeLevel,	IDirectInputDevice2AImpl_GetObjectInfo,	SysMouseAImpl_GetDeviceInfo,	IDirectInputDevice2AImpl_RunControlPanel,	IDirectInputDevice2AImpl_Initialize,	IDirectInputDevice2AImpl_CreateEffect,	IDirectInputDevice2AImpl_EnumEffects,	IDirectInputDevice2AImpl_GetEffectInfo,	IDirectInputDevice2AImpl_GetForceFeedbackState,	IDirectInputDevice2AImpl_SendForceFeedbackCommand,	IDirectInputDevice2AImpl_EnumCreatedEffectObjects,	IDirectInputDevice2AImpl_Escape,	IDirectInputDevice2AImpl_Poll,	IDirectInputDevice2AImpl_SendDeviceData,        IDirectInputDevice7AImpl_EnumEffectsInFile,        IDirectInputDevice7AImpl_WriteEffectToFile,        IDirectInputDevice8AImpl_BuildActionMap,        IDirectInputDevice8AImpl_SetActionMap,        IDirectInputDevice8AImpl_GetImageInfo};#if !defined(__STRICT_ANSI__) && defined(__GNUC__)# define XCAST(fun)	(typeof(SysMouseWvt.fun))#else# define XCAST(fun)	(void*)#endifstatic ICOM_VTABLE(IDirectInputDevice8W) SysMouseWvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2WImpl_QueryInterface,	XCAST(AddRef)IDirectInputDevice2AImpl_AddRef,	XCAST(Release)SysMouseAImpl_Release,	XCAST(GetCapabilities)SysMouseAImpl_GetCapabilities,	SysMouseWImpl_EnumObjects,	XCAST(GetProperty)SysMouseAImpl_GetProperty,	XCAST(SetProperty)SysMouseAImpl_SetProperty,	XCAST(Acquire)SysMouseAImpl_Acquire,	XCAST(Unacquire)SysMouseAImpl_Unacquire,	XCAST(GetDeviceState)SysMouseAImpl_GetDeviceState,	XCAST(GetDeviceData)SysMouseAImpl_GetDeviceData,	XCAST(SetDataFormat)SysMouseAImpl_SetDataFormat,	XCAST(SetEventNotification)SysMouseAImpl_SetEventNotification,	XCAST(SetCooperativeLevel)SysMouseAImpl_SetCooperativeLevel,	IDirectInputDevice2WImpl_GetObjectInfo,	SysMouseWImpl_GetDeviceInfo,	XCAST(RunControlPanel)IDirectInputDevice2AImpl_RunControlPanel,	XCAST(Initialize)IDirectInputDevice2AImpl_Initialize,	XCAST(CreateEffect)IDirectInputDevice2AImpl_CreateEffect,	IDirectInputDevice2WImpl_EnumEffects,	IDirectInputDevice2WImpl_GetEffectInfo,	XCAST(GetForceFeedbackState)IDirectInputDevice2AImpl_GetForceFeedbackState,	XCAST(SendForceFeedbackCommand)IDirectInputDevice2AImpl_SendForceFeedbackCommand,	XCAST(EnumCreatedEffectObjects)IDirectInputDevice2AImpl_EnumCreatedEffectObjects,	XCAST(Escape)IDirectInputDevice2AImpl_Escape,	XCAST(Poll)IDirectInputDevice2AImpl_Poll,	XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData,        IDirectInputDevice7WImpl_EnumEffectsInFile,        IDirectInputDevice7WImpl_WriteEffectToFile,        IDirectInputDevice8WImpl_BuildActionMap,        IDirectInputDevice8WImpl_SetActionMap,        IDirectInputDevice8WImpl_GetImageInfo};#undef XCAST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -