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

Interfaces Graphiques en Java Discussion :

Abonner une frame Java aux multitouch de Windows 7 via JNI et cpp


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2011
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 8
    Par d�faut Abonner une frame Java aux multitouch de Windows 7 via JNI et cpp
    bonjour � tous,

    Je suis en train de d�velopper une application multitouch pour windows en JAVA.
    Codant sous windows, je cherche � r�cup�rer les messages bruts que Windows envoie � chaque 'touch'.
    Pour cela j'ai cr��e une dll en cpp qui est cens�e r�cup�rer ces donn�es et modifier un de mes objets java passer en param�tre avec la position du 'touch' :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    JNIEXPORT jint findWindowFromJava(JNIEnv, jobject, jstring classname, jstring windowsname){
    return (jint)findWindow(classname, windowsname); //renvoie le handle de la fenetre
    }
    JNIEXPORT jboolean JNICALL init(JNIEnv, jobject, jlong hWnd){ //hWnd est le handle de la fenetre (recuperer dans ma classe java, puis réinjecter ici (...))
     
     HINSTANCE hInst = (HINSTANCE)GetWindowLong((HWND)hWnd, GWL_HINSTANCE); // recupere l instance de la fenetre grace au handle
     MyRegisterClass(hInst);
     
      //Enable all gesture types
          GESTURECONFIG gestureConfig;
    	  gestureConfig.dwID = 0;
    	  gestureConfig.dwBlock = 0;
    	  gestureConfig.dwWant = GC_ALLGESTURES; // Permet tous les gestes
     
    BOOL result = SetGestureConfig((HWND)hWnd, 0, 1, &gestureConfig, sizeof(gestureConfig));
    	if (!result){
    			return FALSE;
    		}else{
    			return TRUE;
    		}
    }
     
     
    ATOM MyRegisterClass(HINSTANCE hInstance) //class recopiee d un projet fonctionnant
    {
    	WNDCLASSEX wcex;
     
    	wcex.cbSize = sizeof(WNDCLASSEX);
     
    	wcex.style			= CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc	= WndProc;
    	wcex.cbClsExtra		= 0;
    	wcex.cbWndExtra		= 0;
    	wcex.hInstance		= hInstance;
    	wcex.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
    	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
    	wcex.lpszMenuName	= NULL;
     
    	wcex.lpszClassName	= L"SunAwtFrame"; // mis en brut pour l instant
     
    	wcex.hIconSm		= LoadIcon(NULL, IDI_APPLICATION);
    	return RegisterClassEx(&wcex);
    }
     
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	cout << "Je rentre dans WndProc" << endl;
    	switch (message)
    	{
    	break;
    	case WM_GESTURE:
    		return ProcessGestureMessage(hWnd, wParam, lParam); // une fonction non necessaire de montrer 
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return0;
    }

    voila en gros ma dll. Mon probl�me :
    Le findWindow me renvoie une valeur non nulle, donc la dll reconnait ma JFrame JAVA.
    Le setGestureConfig est ex�cut� sans erreur avec le handler (HWND) de ma fen�tre trouv�e gr�ce � FindWindow.

    Mais ... WndProc, qui est cens� s'activer � chaque �ven�nement, n'est jamais appel� ...
    J'ai essay� de faire un registreClassEx via l'appel MyRegisterClass (pr�sente au dessus) mais avec wcex.lpszClassName = L"SunAwtFrame"; j'ai l'erreur 1410 ( classe d�j� pr�sente)

    ma dll n'est charg� qu'une fois, L"SunAwtFrame" est bien la bonne classe, car c'est avec ce titre que FindWindow trouve la bonne fen�tre.

    Comment fait t'on pour associer WndProc avec ma Frame ?

    Cordialement,



    Je travaille sous visual c+ + et windows seven 32bits

  2. #2
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2011
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 8
    Par d�faut
    Bonjour bonjour,

    J'ai re�u une r�ponse sur un autre forum, je donne la r�ponse, ca peut aider d'autre personne :

    il faut ajouter setGestureConfig avec le HWND de la Frame Java ( r�cup�r� via le FindWindow )

    C'est tout b�te !


    Par contre, j'ai une autre question :
    Je cherche � r�cup�rer si le geste est up, move or down.
    Il faut donc rajouter dans le switch(message) de WndProc le cas : WM_TOUCH.
    Malheureusement ... ce cas n'est jamais vrai pour moi
    Quelqu'un saurait me dire comment rendre ce cas possible ?
    J'ai rajout� RegisterTouchWindows mais ca me retourne une erreur 5 (access denied )


    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
     
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	cout << "message WndProc : " << message << endl;
    	switch (message)
    	{
    	break;
    	case WM_GESTURE:
    		return 0;
            case WM_TOUCH:
                    // never use :( WHY ?
                    return ProcessGestureMessage(hWnd, wParam, lParam);
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return 0;
    }
    cordialement,

  3. #3
    Expert confirm�
    Avatar de sinok
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    8 765
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 8 765
    Par d�faut
    L�, c'est une question qu'il faudrait plut�t poser dans les forums d�di�s � la programmation Windows

  4. #4
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2011
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 8
    Par d�faut
    Bonjour,

    Je sais, mais a part MSDN (dans lequel j'ai d�j� post�) je n'en vois pas d'autre, alors je tente ma chance ici

  5. #5
    Expert confirm�
    Avatar de sinok
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    8 765
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 8 765
    Par d�faut
    Tu as un sous forum d�veloppement Windows ici �galement
    http://www.developpez.net/forums/f16...steme/windows/

  6. #6
    Membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2011
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 8
    Par d�faut
    ha oui exact ... J'avais mal cherch� ..

    je repostes ici alors :
    http://www.developpez.net/forums/d11...a/#post6413781


    Merci

Discussions similaires

  1. Executer une application Java pour mac sous windows
    Par M_Makia dans le forum G�n�ral Java
    R�ponses: 6
    Dernier message: 22/10/2008, 19h42
  2. execution d'une classe java sous windows avec ligne de commande
    Par rinuom dans le forum D�buter avec Java
    R�ponses: 2
    Dernier message: 24/06/2008, 16h04
  3. Rendre une application semblable aux applications Windows Live
    Par sorcer1 dans le forum Windows Forms
    R�ponses: 10
    Dernier message: 09/12/2007, 20h42
  4. Afficher une frame sur Windows
    Par Jonas0122 dans le forum Windows
    R�ponses: 0
    Dernier message: 30/10/2007, 18h49
  5. Lancer une appli Java en tant que Service Windows
    Par danyboy85 dans le forum G�n�ral Java
    R�ponses: 4
    Dernier message: 28/09/2006, 12h17

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