Bonjour,
(J'espère avoir mis mon sujet dans le bon thème. J'ai pas trouvé de thème plus aproprié.)
Je suis en train de créer une application multi-touch en java (sous Windows 7). Pour cela, j'utilise la JDK 1.6 sous eclipse et visual C++ 6.
Pour récupérer les événements multi-touch de windows, il me faut utiliser C++. Jusque là, pas de soucis, j'ai réussi à créer une fenêtre qui me renvoie les mouvements effectués dessus (notamment : Zoom, rotation, déplacement). Je récupère les événements à l'aide de la fonction suivante :
LRESULT CALLBACK WndProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
...
switch (mes)
{
case WM_LBUTTONDOWN:
//Traitement en cas de clic gauche
break;
case WM_MBUTTONDOWN:
//Traitement en cas de clic milieu
break;
case WM_RBUTTONDOWN:
//Traitement en cas de clic droit
break;
case WM_GESTURE:
//Traitement en cas de multi-touch
//Partie qui m'intéresse
break;
case WM_COMMAND:
...
break;
case WM_PAINT:
...
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, mes, wParam, lParam);
}
return 0;
}J'ai donc essayé de créer une DLL C++ récupérant une fenêtre Java (Frame). A partir de cette fenêtre, j'aurais aimé récupéré l'instance de celle-ci afin de pouvoir boucler sur la procédure Ci-dessus.
Tout d'abord j'ai copié la méthode MyRegisterClass de la manière suivante :
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
ATOM temp;
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 = "MAFRAME";
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
temp = RegisterClassEx(&wcex);
return temp;
}Puis j'ai ajouté les lignes suivantes afin de récupérer l'instance de ma fenêtre java (Frame) :
//Recuperation de l'instance de la fenetre
hInst = (HINSTANCE)GetWindowLongPtr( maFrame->hWnd, GWL_HINSTANCE);
MyRegisterClass(hInst);Mais cela n'a pas l'air de fonctionner correctement. J'ai donc essayer de réassocier l'instance à la fenetre avec le code suivant (placé juste aprés le code précédent) : (Je sais que c'est pas propre mais c'était pour tester)
//Association de l'instance avec la fenetre
maFrame->hWnd = CreateWindow("MAFRAME", "MaFrame", NULL,
0, 0, 0, 0, NULL, NULL, hInst, NULL);Avec ceci, lorsque mon application s'initialise, je passe bien dans la fonction WndProc(), mais lorsque j'effectue n'importe quel événements sur la fenêtre (clic souris ou autre), rien ne sort.
Ma démarche peut paraitre vraiment tordue car je n'y connais pas grand chose en C++.
Si quelqu'un a compris mon problème et qu'il connait la solution...
Merci Bien !
Pleox