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++