Revision: 41314
Updated Code
at February 16, 2011 02:48 by aday
Updated Code
---------------------------------- DirectInput.h ------------------------------------------- /* Esto se utilizar���¡ para poder manejar en cualquier programa los eventos de interacci���³n. Se han puesto en una clase aparte para obtener m���¡s portabilidad de este c���³digo. */ /* By Aday Meli���¡n Carrillo for the common knowledge */ #define INITGUID #define DIRECTINPUT_VERSION 0x0800 // Utilizaremos la versi���³n 8 de DirectInput #include "dinput.h" #include "Singleton.h" // Definimos macros que nos ayuden a detectar las pulsaciones #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // Mouse Buttons #define MOUSE_LEFTBUTTON 0 #define MOUSE_RIGHTBUTTON 1 #define MOUSE_MIDDLEBUTTON 2 #define MOUSE_4BUTTON 3 #define MOUSE_5BUTTON 4 #define MOUSE_6BUTTON 5 #define MOUSE_7BUTTON 6 #define MOUSE_8BUTTON 7 // Necesitaremos incluir en el Linker las siguientes librerÃ��Ã�ÂÂas situadas en el directorio de DirectX: //"dinput8.lib" //"dxguid.lib" class ManejadorDirectInput: public Singleton<ManejadorDirectInput> { private: // Variables Necesarias LPDIRECTINPUT8 din; // Puntero a nuestra interfaz DirectInput // Teclado LPDIRECTINPUTDEVICE8 dinkeyboard; // Puntero al dispositivo del teclado BYTE keystate[256]; // El almacenamiento de los estados de las teclas del teclado // Rat���³n LPDIRECTINPUTDEVICE8 dinmouse; // Puntero al dispositivo de rat���³n DIMOUSESTATE mousestate; // Almacenamiento de la informaci���³n del rat���³n POINT RatonPos; public: void initDInput(HINSTANCE hInstance, HWND hWnd); // Inicializamos DirectInput void detect_input(void); // Obtenemos el estado actual de las entradas bool MousePressedButton(int Boton); // Obtenemos si el bot���³n pasado por par���¡metro est���¡ pulsado bool MouseReleasedButton(int Boton); // Obtenemos si el bot���³n pasado por par���¡metro est���¡ suelto POINT GetMousePosition(void); // Obtenemos la posici���³n absoluta actual del rat���³n void cleanDInput(void); // Deinicializa DirectInput y libera la memoria }; ---------------------------------- DirectInput.cpp ----------------------------------------- #include "DirectInput.h" // Inicializaci���³n de DirectInput void ManejadorDirectInput::initDInput(HINSTANCE hInstance, HWND hWnd) { // Creamos las interfaz DirectInput DirectInput8Create(hInstance, // Manejador de la aplicaci���³n DIRECTINPUT_VERSION, // Versi���³n compatible IID_IDirectInput8, // Versi���³n de la interfaz de DirectInput (void**)&din, // El puntero a la interfaz NULL); // Opciones de COM, lo dejaremos a NULL dinmouse = NULL; dinkeyboard = NULL; // Creamos el dispositivo de Teclado din->CreateDevice(GUID_SysKeyboard, // El ID del teclado por defecto que se est���¡ usando &dinkeyboard, // El puntero a la interfaz del dispositivo NULL); // Opciones de COM, lo dejaremos a NULL // Creamos el dispositivo del rat���³n din->CreateDevice(GUID_SysMouse, &dinmouse, NULL); // Asignamos el formato de datos al formato de datos por defecto dinkeyboard->SetDataFormat(&c_dfDIKeyboard); dinmouse->SetDataFormat(&c_dfDIMouse); // Asignamos el control que tendremos en la ventana sobre los dispositivos y su relaci���³n con otras aplicaciones dinkeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); dinmouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); // Obtenemos la posici���³n inicial del rat���³n GetCursorPos(&RatonPos); } // Obtenci���³n de datos actuales introducidos. void ManejadorDirectInput::detect_input(void) { // Obtenemos acceso por si no lo tenemos dinkeyboard->Acquire(); // Obtenemos los datos de entrada y los volcamos en la variable apropiada dinkeyboard->GetDeviceState(256, (LPVOID)keystate); dinmouse->Acquire(); dinmouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate); // Le ponemos lÃ��Ã�ÂÂmite al movimiento del rat���³n RECT rc; GetWindowRect(GetDesktopWindow(), &rc); if(RatonPos.x+mousestate.lX < rc.right && RatonPos.x+mousestate.lX > rc.left)RatonPos.x+=mousestate.lX; if(RatonPos.y+mousestate.lY < rc.bottom && RatonPos.y+mousestate.lY > rc.top)RatonPos.y+=mousestate.lY; } bool ManejadorDirectInput::MousePressedButton(int Boton){ return mousestate.rgbButtons[Boton]; } bool ManejadorDirectInput::MouseReleasedButton(int Boton){ return !mousestate.rgbButtons[Boton]; } POINT ManejadorDirectInput::GetMousePosition(void){ return RatonPos; } // Deinicializamos DirectInput. void ManejadorDirectInput::cleanDInput(void) { dinkeyboard->Unacquire(); // Nos aseguramos que el teclado no est���© en uso dinmouse->Unacquire(); // Nos aseguramos que el teclado no est���¡ en uso din->Release(); // Cerramos DirectInput antes de finalizar }
Revision: 41313
Updated Code
at February 16, 2011 02:44 by aday
Updated Code
---------------------------------- DirectInput.h ------------------------------------------- /* Esto se utilizar�¡ para poder manejar en cualquier programa los eventos de interacci�³n. Se han puesto en una clase aparte para obtener m�¡s portabilidad de este c�³digo. */ /* By Aday Meli�¡n Carrillo for the common knowledge */ #define INITGUID #define DIRECTINPUT_VERSION 0x0800 // Utilizaremos la versi�³n 8 de DirectInput #include "dinput.h" #include "Singleton.h" // Definimos macros que nos ayuden a detectar las pulsaciones #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // Mouse Buttons #define MOUSE_LEFTBUTTON 0 #define MOUSE_RIGHTBUTTON 1 #define MOUSE_MIDDLEBUTTON 2 #define MOUSE_4BUTTON 3 #define MOUSE_5BUTTON 4 #define MOUSE_6BUTTON 5 #define MOUSE_7BUTTON 6 #define MOUSE_8BUTTON 7 // Necesitaremos incluir en el Linker las siguientes librerÃ�ÂÂas situadas en el directorio de DirectX: //"dinput8.lib" //"dxguid.lib" class ManejadorDirectInput: public Singleton<ManejadorDirectInput> { private: // Variables Necesarias LPDIRECTINPUT8 din; // Puntero a nuestra interfaz DirectInput // Teclado LPDIRECTINPUTDEVICE8 dinkeyboard; // Puntero al dispositivo del teclado BYTE keystate[256]; // El almacenamiento de los estados de las teclas del teclado // Rat�³n LPDIRECTINPUTDEVICE8 dinmouse; // Puntero al dispositivo de rat�³n DIMOUSESTATE mousestate; // Almacenamiento de la informaci�³n del rat�³n POINT RatonPos; public: void initDInput(HINSTANCE hInstance, HWND hWnd); // Inicializamos DirectInput void detect_input(void); // Obtenemos el estado actual de las entradas bool MousePressedButton(int Boton); // Obtenemos si el bot�³n pasado por par�¡metro est�¡ pulsado bool MouseReleasedButton(int Boton); // Obtenemos si el bot�³n pasado por par�¡metro est�¡ suelto POINT GetMousePosition(void); // Obtenemos la posici�³n absoluta actual del rat�³n void cleanDInput(void); // Deinicializa DirectInput y libera la memoria }; ---------------------------------- DirectInput.cpp ----------------------------------------- #include "DirectInput.h" // Inicializaci�³n de DirectInput void ManejadorDirectInput::initDInput(HINSTANCE hInstance, HWND hWnd) { // Creamos las interfaz DirectInput DirectInput8Create(hInstance, // Manejador de la aplicaci�³n DIRECTINPUT_VERSION, // Versi�³n compatible IID_IDirectInput8, // Versi�³n de la interfaz de DirectInput (void**)&din, // El puntero a la interfaz NULL); // Opciones de COM, lo dejaremos a NULL dinmouse = NULL; dinkeyboard = NULL; // Creamos el dispositivo de Teclado din->CreateDevice(GUID_SysKeyboard, // El ID del teclado por defecto que se est�¡ usando &dinkeyboard, // El puntero a la interfaz del dispositivo NULL); // Opciones de COM, lo dejaremos a NULL // Creamos el dispositivo del rat�³n din->CreateDevice(GUID_SysMouse, &dinmouse, NULL); // Asignamos el formato de datos al formato de datos por defecto dinkeyboard->SetDataFormat(&c_dfDIKeyboard); dinmouse->SetDataFormat(&c_dfDIMouse); // Asignamos el control que tendremos en la ventana sobre los dispositivos y su relaci�³n con otras aplicaciones dinkeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); dinmouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); // Obtenemos la posici�³n inicial del rat�³n GetCursorPos(&RatonPos); } // Obtenci�³n de datos actuales introducidos. void ManejadorDirectInput::detect_input(void) { // Obtenemos acceso por si no lo tenemos dinkeyboard->Acquire(); // Obtenemos los datos de entrada y los volcamos en la variable apropiada dinkeyboard->GetDeviceState(256, (LPVOID)keystate); dinmouse->Acquire(); dinmouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate); // Le ponemos lÃ�ÂÂmite al movimiento del rat�³n RECT rc; GetWindowRect(GetDesktopWindow(), &rc); if(RatonPos.x+mousestate.lX < rc.right && RatonPos.x+mousestate.lX > rc.left)RatonPos.x+=mousestate.lX; if(RatonPos.y+mousestate.lY < rc.bottom && RatonPos.y+mousestate.lY > rc.top)RatonPos.y+=mousestate.lY; } bool ManejadorDirectInput::MousePressedButton(int Boton){ return mousestate.rgbButtons[Boton]; } bool ManejadorDirectInput::MouseReleasedButton(int Boton){ return !mousestate.rgbButtons[Boton]; } POINT ManejadorDirectInput::GetMousePosition(void){ return RatonPos; } // Deinicializamos DirectInput. void ManejadorDirectInput::cleanDInput(void) { dinkeyboard->Unacquire(); // Nos aseguramos que el teclado no est�© en uso dinmouse->Unacquire(); // Nos aseguramos que el teclado no est�¡ en uso din->Release(); // Cerramos DirectInput antes de finalizar }
Revision: 41312
Updated Code
at February 16, 2011 02:43 by aday
Updated Code
---------------------------------- DirectInput.h ------------------------------------------- /* Esto se utilizará para poder manejar en cualquier programa los eventos de interacción. Se han puesto en una clase aparte para obtener más portabilidad de este código. */ /* By Aday Melián Carrillo for the common knowledge */ #define INITGUID #define DIRECTINPUT_VERSION 0x0800 // Utilizaremos la versión 8 de DirectInput #include "dinput.h" #include "Singleton.h" // Definimos macros que nos ayuden a detectar las pulsaciones #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // Mouse Buttons #define MOUSE_LEFTBUTTON 0 #define MOUSE_RIGHTBUTTON 1 #define MOUSE_MIDDLEBUTTON 2 #define MOUSE_4BUTTON 3 #define MOUSE_5BUTTON 4 #define MOUSE_6BUTTON 5 #define MOUSE_7BUTTON 6 #define MOUSE_8BUTTON 7 // Necesitaremos incluir en el Linker las siguientes librerÃÂas situadas en el directorio de DirectX: //"dinput8.lib" //"dxguid.lib" class ManejadorDirectInput: public Singleton<ManejadorDirectInput> { private: // Variables Necesarias LPDIRECTINPUT8 din; // Puntero a nuestra interfaz DirectInput // Teclado LPDIRECTINPUTDEVICE8 dinkeyboard; // Puntero al dispositivo del teclado BYTE keystate[256]; // El almacenamiento de los estados de las teclas del teclado // Ratón LPDIRECTINPUTDEVICE8 dinmouse; // Puntero al dispositivo de ratón DIMOUSESTATE mousestate; // Almacenamiento de la información del ratón POINT RatonPos; public: void initDInput(HINSTANCE hInstance, HWND hWnd); // Inicializamos DirectInput void detect_input(void); // Obtenemos el estado actual de las entradas bool MousePressedButton(int Boton); // Obtenemos si el botón pasado por parámetro está pulsado bool MouseReleasedButton(int Boton); // Obtenemos si el botón pasado por parámetro está suelto POINT GetMousePosition(void); // Obtenemos la posición absoluta actual del ratón void cleanDInput(void); // Deinicializa DirectInput y libera la memoria }; ---------------------------------- DirectInput.cpp ----------------------------------------- #include "DirectInput.h" // Inicialización de DirectInput void ManejadorDirectInput::initDInput(HINSTANCE hInstance, HWND hWnd) { // Creamos las interfaz DirectInput DirectInput8Create(hInstance, // Manejador de la aplicación DIRECTINPUT_VERSION, // Versión compatible IID_IDirectInput8, // Versión de la interfaz de DirectInput (void**)&din, // El puntero a la interfaz NULL); // Opciones de COM, lo dejaremos a NULL dinmouse = NULL; dinkeyboard = NULL; // Creamos el dispositivo de Teclado din->CreateDevice(GUID_SysKeyboard, // El ID del teclado por defecto que se está usando &dinkeyboard, // El puntero a la interfaz del dispositivo NULL); // Opciones de COM, lo dejaremos a NULL // Creamos el dispositivo del ratón din->CreateDevice(GUID_SysMouse, &dinmouse, NULL); // Asignamos el formato de datos al formato de datos por defecto dinkeyboard->SetDataFormat(&c_dfDIKeyboard); dinmouse->SetDataFormat(&c_dfDIMouse); // Asignamos el control que tendremos en la ventana sobre los dispositivos y su relación con otras aplicaciones dinkeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); dinmouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); // Obtenemos la posición inicial del ratón GetCursorPos(&RatonPos); } // Obtención de datos actuales introducidos. void ManejadorDirectInput::detect_input(void) { // Obtenemos acceso por si no lo tenemos dinkeyboard->Acquire(); // Obtenemos los datos de entrada y los volcamos en la variable apropiada dinkeyboard->GetDeviceState(256, (LPVOID)keystate); dinmouse->Acquire(); dinmouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate); // Le ponemos lÃÂmite al movimiento del ratón RECT rc; GetWindowRect(GetDesktopWindow(), &rc); if(RatonPos.x+mousestate.lX < rc.right && RatonPos.x+mousestate.lX > rc.left)RatonPos.x+=mousestate.lX; if(RatonPos.y+mousestate.lY < rc.bottom && RatonPos.y+mousestate.lY > rc.top)RatonPos.y+=mousestate.lY; } bool ManejadorDirectInput::MousePressedButton(int Boton){ return mousestate.rgbButtons[Boton]; } bool ManejadorDirectInput::MouseReleasedButton(int Boton){ return !mousestate.rgbButtons[Boton]; } POINT ManejadorDirectInput::GetMousePosition(void){ return RatonPos; } // Deinicializamos DirectInput. void ManejadorDirectInput::cleanDInput(void) { dinkeyboard->Unacquire(); // Nos aseguramos que el teclado no esté en uso dinmouse->Unacquire(); // Nos aseguramos que el teclado no está en uso din->Release(); // Cerramos DirectInput antes de finalizar }
Revision: 41311
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 16, 2011 02:42 by aday
Initial Code
---------------------------------- DirectInput.h ------------------------------------------- /* Esto se utilizará para poder manejar en cualquier programa los eventos de interacción. Se han puesto en una clase aparte para obtener más portabilidad de este código. */ /* By Aday Melián Carrillo for the common knowledge */ #define INITGUID #define DIRECTINPUT_VERSION 0x0800 // Utilizaremos la versión 8 de DirectInput #include "dinput.h" #include "Singleton.h" // Definimos macros que nos ayuden a detectar las pulsaciones #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // Mouse Buttons #define MOUSE_LEFTBUTTON 0 #define MOUSE_RIGHTBUTTON 1 #define MOUSE_MIDDLEBUTTON 2 #define MOUSE_4BUTTON 3 #define MOUSE_5BUTTON 4 #define MOUSE_6BUTTON 5 #define MOUSE_7BUTTON 6 #define MOUSE_8BUTTON 7 // Necesitaremos incluir en el Linker las siguientes librerÃas situadas en el directorio de DirectX: //"dinput8.lib" //"dxguid.lib" class ManejadorDirectInput: public Singleton<ManejadorDirectInput> { private: // Variables Necesarias LPDIRECTINPUT8 din; // Puntero a nuestra interfaz DirectInput // Teclado LPDIRECTINPUTDEVICE8 dinkeyboard; // Puntero al dispositivo del teclado BYTE keystate[256]; // El almacenamiento de los estados de las teclas del teclado // Ratón LPDIRECTINPUTDEVICE8 dinmouse; // Puntero al dispositivo de ratón DIMOUSESTATE mousestate; // Almacenamiento de la información del ratón POINT RatonPos; public: void initDInput(HINSTANCE hInstance, HWND hWnd); // Inicializamos DirectInput void detect_input(void); // Obtenemos el estado actual de las entradas bool MousePressedButton(int Boton); // Obtenemos si el botón pasado por parámetro está pulsado bool MouseReleasedButton(int Boton); // Obtenemos si el botón pasado por parámetro está suelto POINT GetMousePosition(void); // Obtenemos la posición absoluta actual del ratón void cleanDInput(void); // Deinicializa DirectInput y libera la memoria }; ---------------------------------- DirectInput.cpp ----------------------------------------- #include "DirectInput.h" // Inicialización de DirectInput void ManejadorDirectInput::initDInput(HINSTANCE hInstance, HWND hWnd) { // Creamos las interfaz DirectInput DirectInput8Create(hInstance, // Manejador de la aplicación DIRECTINPUT_VERSION, // Versión compatible IID_IDirectInput8, // Versión de la interfaz de DirectInput (void**)&din, // El puntero a la interfaz NULL); // Opciones de COM, lo dejaremos a NULL dinmouse = NULL; dinkeyboard = NULL; // Creamos el dispositivo de Teclado din->CreateDevice(GUID_SysKeyboard, // El ID del teclado por defecto que se está usando &dinkeyboard, // El puntero a la interfaz del dispositivo NULL); // Opciones de COM, lo dejaremos a NULL // Creamos el dispositivo del ratón din->CreateDevice(GUID_SysMouse, &dinmouse, NULL); // Asignamos el formato de datos al formato de datos por defecto dinkeyboard->SetDataFormat(&c_dfDIKeyboard); dinmouse->SetDataFormat(&c_dfDIMouse); // Asignamos el control que tendremos en la ventana sobre los dispositivos y su relación con otras aplicaciones dinkeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); dinmouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); // Obtenemos la posición inicial del ratón GetCursorPos(&RatonPos); } // Obtención de datos actuales introducidos. void ManejadorDirectInput::detect_input(void) { // Obtenemos acceso por si no lo tenemos dinkeyboard->Acquire(); // Obtenemos los datos de entrada y los volcamos en la variable apropiada dinkeyboard->GetDeviceState(256, (LPVOID)keystate); dinmouse->Acquire(); dinmouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate); // Le ponemos lÃmite al movimiento del ratón RECT rc; GetWindowRect(GetDesktopWindow(), &rc); if(RatonPos.x+mousestate.lX < rc.right && RatonPos.x+mousestate.lX > rc.left)RatonPos.x+=mousestate.lX; if(RatonPos.y+mousestate.lY < rc.bottom && RatonPos.y+mousestate.lY > rc.top)RatonPos.y+=mousestate.lY; } bool ManejadorDirectInput::MousePressedButton(int Boton){ return mousestate.rgbButtons[Boton]; } bool ManejadorDirectInput::MouseReleasedButton(int Boton){ return !mousestate.rgbButtons[Boton]; } POINT ManejadorDirectInput::GetMousePosition(void){ return RatonPos; } // Deinicializamos DirectInput. void ManejadorDirectInput::cleanDInput(void) { dinkeyboard->Unacquire(); // Nos aseguramos que el teclado no esté en uso dinmouse->Unacquire(); // Nos aseguramos que el teclado no está en uso din->Release(); // Cerramos DirectInput antes de finalizar }
Initial URL
Initial Description
You have to link to "dinput8.lib" and include SDK folder into your project settings. This code works using DirectX SDK (June 2010). I made it on a Singleton to make the access to it easier. Comments in spanish because I'm spanish. Be happy! :)
Initial Title
DirectInput Easy Implementation
Initial Tags
Initial Language
C++