IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Récupérer les évênements de la souris (WINCE)


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut Récupérer les évênements de la souris (WINCE)
    Bonjour,

    Je développe une DLL sous WINCE et je souhaiterais traiter le message WM_LBUTTONDOWN lorsque l'utilisateur appuie sur l'écran tactile.

    Dans la dll, je crée une fenêtre vide car je ne souhaite rien afficher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    HWND aplHwnd = CreateWindow(CLASS_NAME, CLASS_NAME, 
    				SS_NOTIFY,
    				0, // x pos
    				0, // y pos
    				480, // width
    				272, // height
    				NULL, // hWndParent
    				NULL,	// hMenu
    				NULL,	// hInstance
    				NULL	// lpParam
    				);
    puis, après enregistrement de la classe, je traite les messages:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
    	if (!TranslateAccelerator(msg.hwnd, NULL, &msg)) {
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}			
    }
    Je reçois certains messages, mais pas les messages relatifs aux événements de la souris.

    Pouvez-vous m'aider svp?

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    C'est bizarre quand même. Je ne connais pas bien WinCE mais as tu un Spy++ ou un soft dans ce style qui te permet d'espionner les messages reçus ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Merci Phi,

    La gestion des messages sous WINCE est assez similaire.
    Je regarde les messages reçus en utilisant activesync pour debugger. Je vais regarder Spy++ pour voir si cela apporte quelque chose.
    Je reçoit des messages propres à mon application, mais pas les événements de la souris (WM_LBUTTONDOWN).

    La fenêtre crée doit être invisible à l'utilisateur, mais détecter chaque pression sur l'écran via la gestion des messages. Est-ce que cela implique qu'elle doit être au premier plan?

    En résumé, l'application principale, sur laquelle je n'ai aucun contrôle, appelle ma dll. Dans la fonction principale, je fais les choses suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WNDCLASS wc;
    wc.style            = 0;
    wc.lpfnWndProc  = (WNDPROC)myProc;
    wc.cbClsExtra     = 0;
    wc.cbWndExtra   = 0;
    wc.hInstance      = 0;
    wc.hIcon            = 0;
    wc.hCursor          = 0;
    wc.hbrBackground = 0;
    wc.lpszMenuName = 0;
    wc.lpszClassName = szWindowClass;
     
    return RegisterClass(&wc);
    puis je lance le thread dans lequel je vais créer ma fenêtre et gérer les messages:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sThread = AfxBeginThread(threadStartProc, NULL, HREAD_PRIORITY_NORMAL);
    Enfin dans la fonction appelée (threadStartProc):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    HWND aplHwnd = CreateWindow(CLASS_NAME, CLASS_NAME, WS_MAXIMIZE|SS_NOTIFY,
    CW_USEDEFAULT, // x pos
    CW_USEDEFAULT, // y pos
    480, // width
    272, // height
    NULL,// hWndParent
    NULL,	// hMenu
    NULL,	// hInstance
    NULL	// lpParam
    );
    if(aplHwnd==NULL)
      return 1;
     
    // On envoi un message ici à une autre application (B) pour s'enregistrer. Celle-ci envoi les seuls messages que je reçoit.
    ..........
     
    // Traitement des messages. 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
    	if (!TranslateAccelerator(msg.hwnd, NULL, &msg)) {
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}			
    }

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Il me semble que c'est logique que tu reçoives pas tes messages si la souris ne se déplace pas sur ta fenêtre.
    Habituellement, on reçoit un WM_MOUSEMOVE.
    Apparemment la fonction SetCapture() permet qqchose, mais je ne sais pas si elle répond vraiment à tes besoins.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    SetCapture pourrait m'être utile, mais la encore, il faudrait que la fenêtre soit au premier plan, ce que je ne peux pas faire car cela empêcherai probablement l'application mère de fonctionner. En utilisant cette fonction, je ne reçoit d'ailleurs toujours rien. Je suis en train de voir pourquoi.

    Je n'ai pas renseigné le champ hInstance dans CreateWindow ni dans la structure WNDCLASS car jusqu'à présent, je pouvais traiter tous les messages souhaités. Cela peut-il avoir un impact sur la réception des messages des événements souris?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    J'ai réussi à débloquer la situation en modifiants le style de ma fenêtre. Je posterai la solution lorsque j'aurai compris pourquoi cela fonctionne .

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    J'ai modifié la définition de la fenêtre, la largeur, la hauteur, la position d'affichage ainsi que le style.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    hnd=CreateWindow(LBUTTON_CLASS_NAME, LBUTTON_CLASS_NAME,
    			WS_VISIBLE | WS_MAXIMIZE | SS_NOTIFY,
    			CW_USEDEFAULT, // x pos
    			CW_USEDEFAULT, // y pos
    			480, // width
    			272, // height
    			NULL, NULL, NULL, NULL);
     
    ::SetWindowPos(hnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE);
    L'affichage de cette fenêtre empêche toute action sur les fenêtres placées en dessous, mais cela me conviens au final.

    Pour détecter une simple pression sur l'écran sans afficher quoi que ce soit, il faudrait je pense récupérer les messages de la fenêtre de l'application principale via son handle.

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer les événements de la molette de la souris
    Par Delbeke dans le forum Vos contributions VB6
    Réponses: 13
    Dernier message: 05/12/2007, 00h39
  2. Réponses: 1
    Dernier message: 29/06/2007, 12h03
  3. Réponses: 4
    Dernier message: 29/04/2007, 13h40
  4. Réponses: 3
    Dernier message: 05/11/2005, 23h50
  5. [JACOB] récupérer les événements d'objet COM
    Par zlavock dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 12/05/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo