简单介绍一下用DirectInput获取鼠标输入的方法。 源程序是DirectX SDK sample文件夹里面的示例工程。 //----------------------------------------------------------------------------- // File: CustomFormat.cpp // // Desc: demonstrates the use of a custom data format for input retrieval from // a device which doesn't correspond to one of the predefined mouse, keyboard, // or joystick types. // // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #define STRICT #define DIRECTINPUT_VERSION 0x0800 #include <windows.h> #include <commctrl.h> #include <basetsd.h> #include <dinput.h> #pragma warning( disable : 4996 ) // disable deprecated warning #include <strsafe.h> #pragma warning( default : 4996 ) #include "resource.h" // Here we define a custom data format to store input from a mouse. In a // real program you would almost certainly use either the predefined // DIMOUSESTATE or DIMOUSESTATE2 structure to store mouse input, but some // input devices such as the Sidewinder GameVoice controller are not well // described by the provided types and may require custom formats. struct MouseState { LONG lAxisX; LONG lAxisY; BYTE abButtons[3]; BYTE bPadding; // Structure must be DWORD multiple in size. }; // Each device object for which you want to receive input must have an entry // in this DIOBJECTDATAFORMAT array which is stored in the custom DIDATAFORMAT. // The DIOBJECTDATAFORMAT maps detected device object to a particular offset // within MouseState structure declared above. Inside the input routine, a // MouseState structure is provided to the GetDeviceState method, and // DirectInput uses this offset to store the input data in the provided // structure. // // Any of the elements which are not flagged as DIDFT_OPTIONAL, and // which describe a device object which is not found on the actual device will // cause the SetDeviceFormat call to fail. For the format defined below, the // system mouse must have an x-axis, y-axis, and at least one button. DIOBJECTDATAFORMAT g_aObjectFormats[] = { { &GUID_XAxis, FIELD_OFFSET( MouseState, lAxisX ), // X axis DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, { &GUID_YAxis, FIELD_OFFSET( MouseState, lAxisY ), // Y axis DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, { 0, FIELD_OFFSET( MouseState, abButtons[0] ), // Button 0 DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, { 0, FIELD_OFFSET( MouseState, abButtons[1] ), // Button 1 (optional) DIDFT_B