The semantics of version numbers are left to the manufacturer of the device. The only guarantee is that newer versions have larger numbers.
If the method succeeds, the return value is
For compatibility with DirectX 3, it is also valid to pass a DIDEVCAPS_DX3 structure with the dwSize member initialized to sizeof(DIDEVCAPS_DX3).
The number of objects returned in the
If the method succeeds, the return value is
The
Applications should not rely on this method to determine whether certain keyboard keys or indicator lights are present, as these objects might be enumerated even though they are not present. Although the basic set of available objects can be determined from the device subtype, there is no reliable way of determining whether extra objects such as the menu key are available.
Predefined property that allows the application to access the information that DirectInput uses to manipulate axes that require calibration. This property exists primarily for applications of the control panel type. Normal applications should not need to deal with calibration information.
You can access the calibration mode property for a particular axis by setting the dwHow member of the
Control panel applications that set new calibration data must also invoke the IDirectInputJoyConfig::SendNotify method to notify other applications of the change in calibration. For more information about IDirectInputJoyConfig::SendNotify, see the DirectInput Driver Development Kit (DDK).
If the method succeeds, the return value is
If rguidProp is set to
S_FALSE is always returned when
The scan codes reported in Microsoft DirectX 8.1 are different from the ones reported in DirectX 8.0. In DirectX 8.0, the property actually reported the single byte
The following C example shows how to obtain the value of the
dipdw; // contains a structure. hr; dipdw.diph.dwSize = sizeof( ); dipdw.diph.dwHeaderSize = sizeof( ); dipdw.diph.dwObj = 0; // device property dipdw.diph.dwHow = ; hr = idirectinputdevice9_GetProperty(pdid, , &dipdw.diph); if (SUCCEEDED(hr)) { // The dipdw.dwData member contains the buffer size. }
The following example shows how to extract the two WORD values from the dwData member of the
wVendorID = LOWORD(.dwData); wProductID = HIWORD( .dwData);
Specifies whether device objects are self centering. This setting applies to the entire device, rather than to any particular object, so the dwHow member of the associated
The dwData member can be one of the following values.
DIPROPAUTOCENTER_OFF: The device should not automatically center when the user releases the device. An application that uses force feedback should disable autocentering before playing effects.
DIPROPAUTOCENTER_ON: The device should automatically center when the user releases the device.
Not all devices support the autocenter property.
Predefined property that allows the application to access the information that DirectInput uses to manipulate axes that require calibration. This property exists primarily for applications of the control panel type. Normal applications should not need to deal with calibration information.
You can access the calibration mode property for an axis by setting the dwHow member of the
Control panel applications that set new calibration data must also invoke the IDirectInputJoyConfig::SendNotify method to notify other applications of the change in calibration. For more information about IDirectInputJoyConfig::SendNotify, see the DirectX Driver Development Kit (DDK).
Enables the application to specify whether DirectInput should retrieve calibrated or uncalibrated data from an axis. By default, DirectInput retrieves calibrated data.
Setting the calibration mode for the entire device is equivalent to setting it for each axis individually.
The dwData member of the
DIPROPCALIBRATIONMODE_COOKED: DirectInput should return data after applying calibration information. This is the default mode.
DIPROPCALIBRATIONMODE_RAW: DirectInput should return raw, uncalibrated data. This mode is typically used only by applications of the control panel type. Note that raw data might include negative values.
Setting a device into raw mode causes the dead zone, saturation, and range settings to be ignored.
The dwData member contains a gain value that is applied to all effects created on the device. The value is an integer in the range from 0 through 10,000, specifying the amount by which effect magnitudes should be scaled for the device. For example, a value of 10,000 indicates that all effect magnitudes are to be taken at face value. A value of 9,000 indicates that all effect magnitudes are to be reduced to 90 percent of their nominal magnitudes.
DirectInput always checks the gain value before setting the gain property. If the gain is outside of the range (less than zero or greater than 10,000),
Setting a gain value is useful when an application wants to scale down the strength of all force-feedback effects uniformly, based on user preferences.
Unlike other properties, the gain can be set when the device is in an acquired state.
This property exists for advanced applications that want to change the friendly instance name of a device (as returned in the tszInstanceName member of the
This setting applies to the entire device, so the dwHow member of the associated
The pdiph parameter must be a reference to the diph member of a
This property exists for advanced applications that want to change the friendly product name of a device (as returned in the tszProductName member of the
This setting applies to the entire device, so the dwHow member of the associated
The pdiph parameter must be a reference to the diph member of a
Setting the product name is only useful for changing the user-defined name of an analog joystick on Microsoft Windows 98, Windows 2000, and Windows Millennium Edition (Windows Me) computers. In other cases, attempting to set this property will still return
For some devices, this is a read-only property.
You cannot set a reverse range; lmax must be greater than lmin.
If the method succeeds, the return value is
The buffer size determines the amount of data that the buffer can hold between calls to the
If the method succeeds, the return value is
Before a device can be acquired, a data format must be set by using the
Devices must be acquired before calling the
Device acquisition does not use a reference count. Therefore, if an application calls the
If
The return value is
c_dfDIKeyboard
c_dfDIMouse
c_dfDIMouse2
c_dfDIJoystick
c_dfDIJoystick2
If the method succeeds, the return value is
The data format must be set before the device can be acquired by using the
If the application is using action mapping, the data format is set instead by the call to
The application can create the handle as either a manual-reset or autoreset event by using the Win32 CreateEvent function. If the event is created as an autoreset event, the operating system automatically resets the event when a wait has been satisfied. If the event is created as a manual-reset event, it is the application's responsibility to call the Win32 ResetEvent function to reset it. DirectInput does not call the Win32 ResetEvent function for event notification handles. Most applications create the event as an automatic-reset event.
If the method succeeds, the return value is
A device state change is defined as any of the following:
A change in the position of an axis
A change in the state (pressed or released) of a button
A change in the direction of a POV control
Loss of acquisition
Do not call the Win32 CloseHandle function on the event while it has been selected into a DirectInputDevice object. You must call this method with the hEvent parameter set to
The event notification handle cannot be changed while the device is acquired. If the function is successful, the application can use the event handle like any other Win32 event handle.
ExamplesThe following code example checks whether the handle is currently set without blocking:
dwResult = WaitForSingleObject(hEvent, 0); if (dwResult == WAIT_OBJECT_0) { // Event is set. If the event was created as // autoreset, it has also been reset. }
The following code example illustrates blocking indefinitely until the event is set. This behavior is strongly discouraged because the thread does not respond to the system until the wait is satisfied. In particular, the thread does not respond to Microsoft Windows messages.
dwResult = WaitForSingleObject(hEvent, INFINITE); if (dwResult == WAIT_OBJECT_0) { // Event has been set. If the event was created // as autoreset, it has also been reset. }
The following code example illustrates a typical application loop for a non-message-based application that uses two events:
HANDLE ah[2] = { hEvent1, hEvent2 }; while (TRUE) { dwResult = MsgWaitForMultipleObjects(2, ah,, INFINITE, QS_ALLINPUT); switch (dwResult) { case WAIT_OBJECT_0: // Event 1 has been set. If the event was created as // autoreset, it has also been reset. ProcessInputEvent1(); break; case WAIT_OBJECT_0 + 1: // Event 2 has been set. If the event was created as // autoreset, it has also been reset. ProcessInputEvent2(); break; case WAIT_OBJECT_0 + 2: // A Windows message has arrived. Process // messages until there aren't any more. while(PeekMessage(&msg, null , 0, 0, PM_REMOVE)){ if (msg.message == WM_QUIT) { goto exitapp; } TranslateMessage(&msg); DispatchMessage(&msg); } break; default: // Unexpected error. Panic(); break; } }
The following code example illustrates a typical message loop for a message-based application that uses two events:
HANDLE ah[2] = { hEvent1, hEvent2 }; DWORD dwWait = 0; while (TRUE) { dwResult = MsgWaitForMultipleObjects(2, ah,, dwWait, QS_ALLINPUT); dwWait = 0; switch (dwResult) { case WAIT_OBJECT_0: // Event 1 has been set. If the event was // created as autoreset, it has also // been reset. ProcessInputEvent1(); break; case WAIT_OBJECT_0 + 1: // Event 2 has been set. If the event was // created as autoreset, it has also // been reset. ProcessInputEvent2(); break; case WAIT_OBJECT_0 + 2: // A Windows message has arrived. Process // messages until there aren't any more. while(PeekMessage(&msg, null , 0, 0, PM_REMOVE)){ if (msg.message == WM_QUIT) { goto exitapp; } TranslateMessage(&msg); DispatchMessage(&msg); } break; default: // No input or messages waiting. // Do a frame of the game. // If the game is idle, tell the next wait // to wait indefinitely for input or a message. if (!DoGame()) { dwWait = INFINITE; } break; } }
For compatibility with DirectX 3, it is also valid to pass a DIDEVICEOBJECTINSTANCE_DX3 structure with the dwSize member initialized to sizeof(DIDEVICEOBJECTINSTANCE_DX3).
If the method succeeds, the return value is
For compatibility with DirectX 3, it is also valid to pass a DIDEVICEINSTANCE_DX3 structure with the dwSize member initialized to sizeof(DIDEVICEINSTANCE_DX3).
If the method succeeds, the return value is
If the method succeeds, the return value is
If this method fails, the underlying object should be considered to be in an indeterminate state and must be reinitialized before use.
If the method succeeds, the return value is
If the return value is
If the method succeeds, the return value is
If the callback stops the enumeration prematurely, the enumeration is considered to have succeeded.
An application can use the dwEffType member of the DIEffectInfo structure to obtain general information about the effect, such as its type and which envelope and condition parameters are supported by the effect.
To exploit an effect to its fullest, contact the device manufacturer to obtain information about the semantics of the effect and its effect-specific parameters.
Note |
---|
If this method is called on an non-Force Feedback device, E_POINTER will be returned. |
The value is a combination of the following constants.
Applications should ignore any flags that are not currently defined.
The device must be acquired at the exclusive cooperative level for this method to succeed.
The
Note |
---|
When calling |
While the device is paused, new effects cannot be started, and existing ones cannot be modified. Doing so can cause the subsequent
To abandon a pause and stop all effects, use the
If the method succeeds, the return value is
The device must be acquired at the exclusive cooperative level for this method to succeed.
Note |
---|
When calling |
If the method succeeds, the return value is
The results are unpredictable if you create or destroy an effect while an enumeration is in progress. However, the callback function can safely release the effect passed to it.
If the method succeeds, the return value is
Other device-specific error codes are also possible. Ask the hardware manufacturer for details.
Because each driver implements different escapes, it is the application's responsibility to ensure that it is sending the escape to the correct driver by comparing the value of the guidFFDriver member of the
If the method succeeds, the return value is
Before a device data can be polled, the data format must be set by using the
Note |
---|
There are no devices that accept output from |
If the method succeeds, the return value is
Applications should not use
If the method succeeds, the return value is
If the callback stops the enumeration prematurely, the enumeration is considered to have succeeded.
If the method succeeds, it returns
If the method succeeds, the return value is
The method returns
If
If DIEFF_MAPFILEFAIL is returned, an error has occurred either reading the vendor supplied file for the device or reading or writing the user configuration file for the device.
If
If the method succeeds, the return value can be one of the following error values:
This method provides the mechanism to change action-to-control mapping from the device defaults. An application must use this method to map its in-game actions to virtual controls.
The user name passed to this method binds a set of action mappings for a device to a specific user. Settings are automatically saved to disk when they differ from the currently applied map. Applications that accept input from multiple users should be very careful when applying action maps to the system mouse or keyboard, as the action maps for each user may conflict.
The method can be called only when the device is not acquired.
If
If the method succeeds, the return value is
For compatibility with DirectX 3, it is also valid to pass a DIDEVCAPS_DX3 structure with the dwSize member initialized to sizeof(DIDEVCAPS_DX3).
The number of objects returned in the
The data format must be set before the device can be acquired by using the
If the application is using action mapping, the data format is set instead by the call to
A device state change is defined as any of the following:
A change in the position of an axis
A change in the state (pressed or released) of a button
A change in the direction of a POV control
Loss of acquisition
Do not call the Win32 CloseHandle function on the event while it has been selected into a DirectInputDevice object. You must call this method with the hEvent parameter set to
The event notification handle cannot be changed while the device is acquired. If the function is successful, the application can use the event handle like any other Win32 event handle.
ExamplesThe following code example checks whether the handle is currently set without blocking:
dwResult = WaitForSingleObject(hEvent, 0); if (dwResult == WAIT_OBJECT_0) { // Event is set. If the event was created as // autoreset, it has also been reset. }
The following code example illustrates blocking indefinitely until the event is set. This behavior is strongly discouraged because the thread does not respond to the system until the wait is satisfied. In particular, the thread does not respond to Microsoft Windows messages.
dwResult = WaitForSingleObject(hEvent, INFINITE); if (dwResult == WAIT_OBJECT_0) { // Event has been set. If the event was created // as autoreset, it has also been reset. }
The following code example illustrates a typical application loop for a non-message-based application that uses two events:
HANDLE ah[2] = { hEvent1, hEvent2 }; while (TRUE) { dwResult = MsgWaitForMultipleObjects(2, ah,, INFINITE, QS_ALLINPUT); switch (dwResult) { case WAIT_OBJECT_0: // Event 1 has been set. If the event was created as // autoreset, it has also been reset. ProcessInputEvent1(); break; case WAIT_OBJECT_0 + 1: // Event 2 has been set. If the event was created as // autoreset, it has also been reset. ProcessInputEvent2(); break; case WAIT_OBJECT_0 + 2: // A Windows message has arrived. Process // messages until there aren't any more. while(PeekMessage(&msg, null , 0, 0, PM_REMOVE)){ if (msg.message == WM_QUIT) { goto exitapp; } TranslateMessage(&msg); DispatchMessage(&msg); } break; default: // Unexpected error. Panic(); break; } }
The following code example illustrates a typical message loop for a message-based application that uses two events:
HANDLE ah[2] = { hEvent1, hEvent2 }; DWORD dwWait = 0; while (TRUE) { dwResult = MsgWaitForMultipleObjects(2, ah,, dwWait, QS_ALLINPUT); dwWait = 0; switch (dwResult) { case WAIT_OBJECT_0: // Event 1 has been set. If the event was // created as autoreset, it has also // been reset. ProcessInputEvent1(); break; case WAIT_OBJECT_0 + 1: // Event 2 has been set. If the event was // created as autoreset, it has also // been reset. ProcessInputEvent2(); break; case WAIT_OBJECT_0 + 2: // A Windows message has arrived. Process // messages until there aren't any more. while(PeekMessage(&msg, null , 0, 0, PM_REMOVE)){ if (msg.message == WM_QUIT) { goto exitapp; } TranslateMessage(&msg); DispatchMessage(&msg); } break; default: // No input or messages waiting. // Do a frame of the game. // If the game is idle, tell the next wait // to wait indefinitely for input or a message. if (!DoGame()) { dwWait = INFINITE; } break; } }
For compatibility with DirectX 3, it is also valid to pass a DIDEVICEINSTANCE_DX3 structure with the dwSize member initialized to sizeof(DIDEVICEINSTANCE_DX3).
Applications do not typically need to create a
Applications that need to create a
The following code example sets a data format for a device that has an X-axis and a Y-axis:
// Suppose an application uses the following // structure to read device data. typedef struct MYDATA { LONG lX; // X-axis goes here. LONG lY; // Y-axis goes here. BYTE bButtonA; // One button goes here. BYTE bButtonB; // Another button goes here. BYTE bPadding[2]; // Must be DWORD multiple in size. } MYDATA; // Then, it can use the following data format. DIOBJECTDATAFORMAT rgodf[ ] = { { &, FIELD_OFFSET(MYDATA, lX), | , 0, }, { & , FIELD_OFFSET(MYDATA, lY), | , 0, }, { & , FIELD_OFFSET(MYDATA, bButtonA), | , 0, }, { & , FIELD_OFFSET(MYDATA, bButtonB), | , 0, }, }; #define numObjects (sizeof(rgodf) / sizeof(rgodf[0])) df = { sizeof( ), // Size of this structure sizeof(DIOBJECTDATAFORMAT), // Size of object data format , // Absolute axis coordinates sizeof(MYDATA), // Size of device data numObjects, // Number of objects rgodf, // And here they are };
The buffer at lprgImageInfoArray must be large enough to hold all required image information structures. Applications can query for the required size by calling the
The following device types and subtypes are defined for use in the dwDevType member.
First-person action game device. The following subtypes are defined.
Device that does not provide the minimum number of device objects for action mapping.
Device designed for first-person shooter games.
Device with six degrees of freedom; that is, three lateral axes and three rotational axes.
Unknown subtype.
Device that does not fall into another category.
Input device used to control another type of device from within the context of the application. The following subtypes are defined.
Control used to make communications selections.
Device that must use its default configuration and cannot be remapped.
Unknown subtype.
Device for steering. The following subtypes are defined.
Steering device that reports acceleration and brake pedal values from a single axis.
Steering device that reports acceleration and brake pedal values from separate axes.
Hand-held steering device.
Steering device that does not provide the minimum number of device objects for action mapping.
Steering device that reports acceleration, brake, and clutch pedal values from separate axes.
Controller for flight simulation. The following subtypes are defined.
Flight controller that does not provide the minimum number of device objects for action mapping.
Flight device based on a remote control for model aircraft.
Joystick.
Yoke.
Gamepad. The following subtypes are defined.
Gamepad that does not provide the minimum number of device objects for action mapping.
Standard gamepad that provides the minimum number of device objects for action mapping.
Gamepad that can report x-axis and y-axis data based on the attitude of the controller.
Joystick. The following subtypes are defined.
Joystick that does not provide the minimum number of device objects for action mapping.
Standard joystick that provides the minimum number of device objects for action mapping.
Keyboard or keyboard-like device. The following subtypes are defined.
Subtype could not be determined.
IBM PC/XT 83-key keyboard.
Olivetti 102-key keyboard.
IBM PC/AT 84-key keyboard.
IBM PC Enhanced 101/102-key or Microsoft Natural keyboard.
Nokia 1050 keyboard.
Nokia 9140 keyboard.
Japanese NEC PC98 keyboard.
Japanese NEC PC98 laptop keyboard.
Japanese NEC PC98 106-key keyboard.
Japanese 106-key keyboard.
Japanese AX keyboard.
Japanese J3100 keyboard.
A mouse or mouse-like device (such as a trackball). The following subtypes are defined.
Mouse that returns absolute axis data.
Fingerstick.
Touchpad.
Trackball.
Traditional mouse.
Subtype could not be determined.
Remote-control device. The following subtype is defined.
Subtype could not be determined.
Screen reference. The following subtypes are defined.
Unknown subtype.
Light gun.
Light pen.
Touch screen.
Specialized device with functionality unsuitable for the main control of an application, such as pedals used with a wheel. The following subtypes are defined.
Secondary handheld controller.
Device whose primary function is to report acceleration and brake pedal values from a single axis.
Device whose primary function is to report acceleration and brake pedal values from separate axes.
Device that tracks hand movement.
Device that tracks head movement.
Device with rudder pedals.
Device that reports gear selection from an axis.
Device that reports gear selection from button states.
Device whose primary function is to report at least two throttle values. It may have other controls.
Device whose primary function is to report acceleration, brake, and clutch pedal values from separate axes.
Device whose primary function is to report a single throttle value. It may have other controls.
Unknown subtype.
Versions of DirectInput earlier than DirectX 8.0 have a somewhat different scheme of device types and subtypes. See the DIDEVTYPExxx defines in Dinput.h.
Note |
---|
The value in dwOfs is the offset within the raw data returned by the device, regardless of whether the data format has been set for the device. |
Applications can use the wUsagePage and wUsage members to obtain additional information about how the object was designed to be used. For example, if wUsagePage has the value 0x02 (vehicle controls) and wUsage has the value 0xB9 (elevator trim), the object was designed to be the elevator trim control on a flight stick. A flight simulator application can use this information to provide more reasonable defaults for objects on the device. HID usage codes are determined by the USB standards committee.
If the method succeeds, the return value is
Calling this method with pUnkOuter =
Calling this method with pUnkOuter !=
To restrict the enumeration to a particular type of device, set this parameter to a DI8DEVTYPE_* value. See
To enumerate a class of devices, use one of the following values.
If the method succeeds, the return value is
All installed devices can be enumerated, even if they are not present. For example, a flight stick might be installed on the system but not currently plugged into the computer. Set the dwFlags parameter to indicate whether only attached or all installed devices should be enumerated. If the
A preferred device type can be passed as a dwDevType filter so that only the devices of that type are enumerated.
On Microsoft Windows XP, DirectInput enumerates only one mouse and one keyboard device, referred to as the system mouse and the system keyboard. These devices represent the combined output of all mice and keyboards respectively on a system. For information about how to read from multiple mice or keyboards individually on Windows XP, see the WM_INPUT documentation.
Note |
---|
The order in which devices are enumerated by DirectInput is not guaranteed. |
If the method succeeds, the return value is
If the method succeeds, the return value is
If the method succeeds, the return value is
If the method succeeds, the return value is
The keyboard and mouse are enumerated last.
Note |
---|
The order in which devices are enumerated by DirectInput is not guaranteed. |
Note |
---|
The rglDirection array must contain cAxes entries, even if polar or spherical coordinates are given. In these cases, the last element in the rglDirection array is reserved and must be 0. |
Note |
---|
The rglDirection array must contain cAxes entries, even if polar or spherical coordinates are given. In these cases, the last element in the rglDirection array is reserved and must be 0. |
If the function succeeds, the return value is
The DirectInput object created by this function is implemented in Dinput8.dll. Versions of interfaces earlier than DirectX 8.0 cannot be obtained in this implementation.
To create a DirectX 8.x interface with the latest DirectX SDK without using CoCreateInstance:
Set "#define
Call DirectInput8Create instead of DirectInputCreateEx.
Link to the Dinput8.lib library instead of Dinput.lib.
To create a DirectX 8.x interface with the DirectX 8.x SDK without using CoCreateInstance:
Call DirectInput8Create instead of DirectInputCreateEx.
Link to the Dinput8.lib library instead of Dinput.lib.
To create a DirectX 7.0 interface from the DirectX 8.x or latest DirectX SDK without using CoCreateInstance:
Set "#define
Call DirectInputCreateEx instead of DirectInput8Create.
Link to the Dinput.lib library instead of Dinput8.lib.
To create a DirectX 7.0 interface from the DirectX 8.x or latest DirectX SDK using CoCreateInstance:
Call CoInitializeEx.
Call CoCreateInstance using CLISID_DirectInput.
Use IDirectInput7::Initialize to initialize the DirectInput object.
To create a DirectX 8.x or DirectX 9.0 interface from the DirectX 8.x or latest DirectX SDK using CoCreateInstance:
Call CoInitializeEx.
Call CoCreateInstance using CLISID_DirectInput8.
Use
Calling the function with pUnkOuter =
Calling the function with pUnkOuter !=
The ftTimeStamp member can contain special values that apply to new and unused devices. New devices have never been enumerated for this application and have never had an action map applied to them. Unused devices have been enumerated for the application before but have never had an action map applied. New devices always have DIAFTS_NEWDEVICELOW and DIAFTS_NEWDEVICEHIGH in the low and high DWORDs respectively of the
Applications should not use ftTimeStamp to check for new devices. Instead, they should look for the DIEDBS_RECENTDEVICE and DIEDBS_NEWDEVICE flags in the enumeration callback. For more information, see DIEnumDevicesBySemanticsCallback.
A reference to an array of
Different types of conditions interpret the parameters differently, but the basic idea is that force resulting from a condition is equal to A(q - q0) where A is a scaling coefficient, q is some metric, and q0 is the neutral value for that metric.
The preceding simplified formula must be adjusted if a nonzero deadband is provided. If the metric is less than lOffset - lDeadBand, the resulting force is given by the following formula:
force = lNegativeCoefficient * ( q - ( lOffset - lDeadBand))
Similarly, if the metric is greater than lOffset + lDeadBand, the resulting force is given by the following formula:
force = lPositiveCoefficient * ( q - ( lOffset + lDeadBand))
A spring condition uses axis position as the metric.
A damper condition uses axis velocity as the metric.
An inertia condition uses axis acceleration as the metric.
If the number of
If there is a single
Because each driver implements different escapes, it is the application's responsibility to ensure that it is talking to the correct driver by comparing the guidFFDriver member in the
The system time returned in dwTimeStamp comes from the same clock used by the Microsoft Win32 GetTickCount or timeGetTime functions, but it produces potentially more precise values. For example, on Microsoft Windows 95, the GetTickCount timer is updated only every 55 milliseconds, but the dwTimeStamp value is accurate to within 1 millisecond. Therefore, if you call GetTickCount and it returns n, and you then receive an event with a timestamp of n + n1, you cannot assume that the event took place exactly n1 milliseconds after the call to GetTickCount.
The diph member must be initialized as follows:
Member | Value |
---|---|
dwSize | sizeof( |
dwHeaderSize | sizeof( |
dwObj | For this structure, this member must be set to 0. |
dwHow | Specifies how the dwObj member should be interpreted. For this structure, dwHow should be |
The
The application calls the
The diph member must be initialized as follows:
Member | Value |
---|---|
dwSize | sizeof( |
dwHeaderSize | sizeof( |
dwObj | If the dwHow member is If the dwHow member is If the dwHow member is If the dwHow member is |
dwHow | Specifies how the dwObj member should be interpreted. See the preceding description of the dwObj member for details. |
The diph member must be initialized as follows:
Member | Value |
---|---|
dwSize | sizeof( |
dwHeaderSize | sizeof( |
dwObj | If the dwHow member is If the dwHow member is If the dwHow member is If the dwHow member is |
dwHow | Specifies how the dwObj member should be interpreted. See the preceding description of the dwObj member for details. |
The diph member must be initialized as follows:
Member | Value |
---|---|
dwSize | sizeof( |
dwHeaderSize | sizeof( |
dwObj | If the dwHow member is If the dwHow member is If the dwHow member is If the dwHow member is |
dwHow | Specifies how the dwObj member should be interpreted. See the preceding description of the dwObj member for details. |
The range values for devices whose ranges are unrestricted wraparound.
The diph member must be initialized as follows:
Member | Value |
---|---|
dwSize | sizeof( |
dwHeaderSize | sizeof( |
dwObj | If the dwHow member is If the dwHow member is If the dwHow member is If the dwHow member is |
dwHow | Specifies how the dwObj member should be interpreted. See the preceding description of the dwObj member for details. |
The
The structure describes a constant force effect.
A reference to a single
The structure describes a custom or user-defined force.
A reference to a
The structure describes a periodic effect.
A reference to a single
A device driver cannot provide support for all values in the dwPhase member. In this case, the value is rounded off to the nearest supported value.
A reference to a single
The dwDuration for a ramp force effect cannot be INFINITE.