begin process at 2012 05 29 23:17:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

Léger problèmes avec DirectInput


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Léger problèmes avec DirectInput

dimanche 29 juin 2008 à 18:11:13 | Léger problèmes avec DirectInput

philmor34

Léger problème avec DirectInput

J'ai créé l'objet  DirectInput8Create dans la class de ma fenêtre

j'ai créé une classe clavier pour gérer tout le code DirectInput du clavier dans celle ci

bool Keyboard::Initialize (LPDIRECTINPUT8 di, HWND hWnd)
{
  HRESULT hr = di->CreateDevice (GUID_SysKeyboardEm, &keyboard, NULL); 
  if (FAILED(hr))
  { 
     InitializeError (); 
    return false; 
} 
 
hr = keyboard->SetDataFormat (&c_dfDIKeyboard); 
if FAILED(hr) 
{ 
    InitializeError(); 
   return false; 
} 
hr = keyboard->SetCooperativeLevel (hWnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE ); 
if FAILED(hr) 
{ 
    InitializeError(); 
   return false; 
} 
hr = keyboard->Acquire (); 
if FAILED(hr) 
{ 
  InitializeError (); 
  return false; 
} 
return true;
}

dans la boucle de message, j'ai un appel à une fonction dans ma classe clavier:
void Keyboard::ProcessInput ()
{
#define KEYDOWN(name, key) (name[key] & 0x80) 
  if (keyboard)
  {
    char buffer[256]; 
    ZeroMemory (buffer, sizeof(buffer)); // J'ai essayé avec et sans cette ligne
    HRESULT hr = keyboard->GetDeviceState (sizeof (buffer),(LPVOID)&buffer); 
    if FAILED (hr) 
    { 
      return; 
    } 



    if (KEYDOWN (buffer, DIK_ESCAPE))
      PostQuitMessage (0);
    if (KEYDOWN(buffer, DIK_RIGHT)) // J'ai ajouté ce if en pensant qu'il y
      PostQuitMessage (0);          // avait en problème avec ma touche ESC
      for (int i= 0; i < 256; i++ ) // J'ai ajouté cette boucle for
      {                             // Pour tester toutes les touches
        if( buffer[i] & 0x80 )      // du clavier.
        {
          PostQuitMessage (0);
        }
      }

J'ai beau appuyé sur n'importe quelle touche de mon clavier, il n'y a jamais une de mes touches pressées qui fonctionne. Si je met un point d'arrêt sur la fonction dans la boucle de message qui
appelle cette fonction, le programme est arrêté à ce point, donc elle est bien appelée.
Si je met un point d'insertion sur la méthode GetDeviceState méthode, le programme s'arrête à cette
méthode, donc la fonction est réellement bien appelée, mais comme j'entre dans visual C++,
mon programme perd l'acquisition du clavier, et donc je me retrouve dans le code d'erreur de cette
méthode.

J'utilise le DirectX SDK de mars 2008. Quelqu'un connais t'il la réponse à ce problème ?
J'ai du utilisé le niveau de coopération: DISCL_BACKGROUND | DISCL_NONEXCLUSIVE.
C'est le seul qui fonctionne, en mode debug ou release, l'application lancée dans ou en dehors de l'IDE
Visual C++.

dimanche 29 juin 2008 à 20:56:05 | Re : Léger problèmes avec DirectInput

yann_lo_san

Salut,
je peux me tromper mais je suis pas sur de ton pointeur ici :
HRESULT hr = keyboard->GetDeviceState (sizeof (buffer), (LPVOID)&buffer);
Cela m'a lair d'être l'adresse d'une adresse et pas l'adresse d'un tableau.


J'aurais fait :

//global
UCHAR* buffer = new UCHAR[256];


// Appelée par boucle de message
{
   HRESULT hr;
 
   while( ((hr=KeyboardDevice->GetDeviceState(256, (LPVOID)buffer)))==DIERR_INPUTLOST )
   {
      if( FAILED(KeyboardDevice->Acquire()) ) 
         return FALSE;
   }

   ClavierJeu(buffer);
}


// le traitement
void ClavierJeu(UCHAR* TableauTouche)
{
   if( TableauTouche[DIK_ESCAPE] & 0x80 )
   {
      //ect...
   }
}



Cette discussion est classée dans : buffer, clavier, keyboard, hr, if


Répondre à ce message

Sujets en rapport avec ce message

reinitialiser le buffer du clavier [ par jmdelhalle ] comment réinitialiser (vider) le buffer du clavier par exemple apres l'entree d'un mot de passe afin de ne pas introduire de caracteres parasites CreateProcess et processus infini [ par Rankin ] Salut à tous,Je suis en train de développer une appli qui lance pas mal de commandes système pour récupérer notamment la configuration du réseau. Pour char* dans un destructeur [ par pepsidrinker ] Premierement, merci de lire ce post, et merci a tous ceux qui veulent maider. Jai le probleme suivant: Jassigne des char* avec 'new[]' dans le constru analyseur lexical pascal [ par perrotta ] Bonjour, dsl pour ma langue je parle pas bien le français; je suis entrin de devlopper un analyseur lexical pour un programme (pascal) prèci ,et j'ai Help, MySQL, netbeans, JSP [ par boevan ] Bonjour à vous,Je suis un grand débutant etje sollicite votre aide car je n'arrive pas à supprimer un contact de ma base de données.Affichage des cont tableau [ par ngabou98 ] bonjour à tous c'est encore moi svp j'ai besoin de votre aide je travaille sur la méthode de simplification d'une fonction booléene par la méthode de probleme de liaison [ par sambalien ] Je suis en train d'apprendre comment faire la connexion de sql avec C.  Voici ma source#include #include #include // #include int main(){ Problème de réinitialisation lorsque l'on ferme par la croix rouge [ par ag1987 ] Bonjour,Je programme en C++ avec Microsoft Visual C++ 6.0, et je travail sur un projet qui utilise les MFC.J'ai un problème de réinitialisation lorsqu ce code ne marche pas?????????? [ par banak3181 ] s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio. Plusieurs raccourcis clavier [ par ringo44 ] Bonjour j'aimerai savoir comment faire pour avoir 2 raccourcis clavier différents. Je m'explique dans une fenêtre j'ai déjà le raccourci suivant : m_h


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales