cs_ToToL
Messages postés170Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 9 juillet 2008
-
8 mai 2004 à 11:21
cs_ToToL
Messages postés170Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 9 juillet 2008
-
8 mai 2004 à 11:56
J'ai créé un programme sauf que mon probleme est la vitesse de repetition des touche que je voudrai faire instantanné car sinon j'ai il y a un "blanc" de 0.5sec au debut.
Merci et aurevoire
Voici mon code
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#define NOM_FENETRE_1 "fenetre 1"
HINSTANCE hinst;
struct cercle {int x1;int y1; int x2; int y2;}mon_cercle;
int WINAPI WinMain (HINSTANCE hInstance, //numero definissant notre programme
HINSTANCE hPrevInstance, //plus utilisé (à NULL°
PSTR szCmdLine, //ligne de commande avec l'appel du programme
int iCmdShow) //état du programme au démarrage
{
//variable devant contenir un numero identifiant la fenetre que nous allons creer
HWND hwnd;
//structure contenant les données d'un message
MSG msg ;
//classe de fenetre
WNDCLASS wndclass;
//Instance du programme
hinst = hInstance;
//place du cercle
mon_cercle.x1=50;
mon_cercle.x2=70;
mon_cercle.y1=50;
mon_cercle.y2=70;
wndclass.style = CS_HREDRAW | CS_VREDRAW ; //demande à Windows de rafraichir la fenetre si sa largeur ou sa hauteur changent
wndclass.lpfnWndProc = WndProc ; //donne l'adresse de la procédure de fenêtre
wndclass.cbClsExtra = 0 ; //permet de reserver de l'espace mémoire interne...
wndclass.cbWndExtra = 0 ; //...a windows pour notre appli (non neccessaire)
wndclass.hInstance = hinst ; //a quel programme est destiné cette fenêtre (le notre)
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//definit l'icône de notre programme (icône par defaut)...
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //...le curseur (par defaut)
wndclass.hbrBackground = CreateSolidBrush(RGB(255, 0,0));//...la couleur de fond (ici GRAY_BRUSH, mais il y'en a d'autres (WHITE_BRUSH, BLACK_BRUSH..)
wndclass.lpszMenuName = NULL ; //permet de donner le nom d'une ressource menu (nous verrons cela plus tard)
wndclass.lpszClassName = NOM_FENETRE_1 ; //nom que nous attribuons a la classe de fenêtre
//créer la classe de fenêtre et la sauvegarder sous ce nom
RegisterClass (&wndclass);
//creer la fenêtre a partir de notre classe de fenêtre
hwnd = CreateWindow (NOM_FENETRE_1, // nom de la classe de fenêtre pour créer notre fenêtre
"Mon premiere programme Win32 !", // titre de la fenêtre
WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU, // style de la fenêtre (ici superposable)
100, // position initiale coin superieur gauche en X
100, // position initiale coin superieur gauche en y
320, // largeur de départ
240, // hauteur de départ
NULL, // pas de fenêtre parente
NULL, // pas de menu
hinst, // a quel programme est relié notre fenêtre
NULL) ; // données de création
//affiche la fenetre
ShowWindow (hwnd, iCmdShow);
//mettre son contenu à jour
UpdateWindow (hwnd);
while (GetMessage (&msg,NULL,0,0))
{
//traduire les données du message pour qu'elles soient lisible
TranslateMessage (&msg) ;
//envoyer le message à Windows qui le transmettra à WINDOWPROC
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//handle sur un device context
HDC hdc ;
//structure de dessin
PAINTSTRUCT ps ;
//structure contenant les coordonnées et la taille d'un rectangle
RECT rect ;
switch (message)
{
//Si une touche est enfoncée
case WM_KEYDOWN:
if (HIWORD(GetKeyState(VK_UP)))
{
mon_cercle.y1 = mon_cercle.y1-5;
mon_cercle.y2 = mon_cercle.y2-5;
InvalidateRect(hwnd, NULL, TRUE);
}
if (HIWORD(GetKeyState(VK_DOWN)))
{
mon_cercle.y1 = mon_cercle.y1+5;
mon_cercle.y2 = mon_cercle.y2+5;
InvalidateRect(hwnd, NULL, TRUE);
}
if (HIWORD(GetKeyState(VK_RIGHT)))
{
mon_cercle.x1 = mon_cercle.x1+5;
mon_cercle.x2 = mon_cercle.x2+5;
InvalidateRect(hwnd, NULL, TRUE);
}
if (HIWORD(GetKeyState(VK_LEFT)))
{
mon_cercle.x1 = mon_cercle.x1-5;
mon_cercle.x2 = mon_cercle.x2-5;
InvalidateRect(hwnd, NULL, TRUE);
}
return 0;
//s'il faut redessiner le contenu de la fenetre
case WM_PAINT:
//obtenir les données graphique de la fenêtre
hdc = BeginPaint (hwnd, &ps) ;
//Selectionne le pinceau
SelectObject(hdc, CreateSolidBrush(RGB(255, 0,0)));
//faire en sorte que le fond du texte soit transparent (sinon le tour du texte
//serait blanc sur nue fenêtre grise...)
SetBkMode( hdc, TRANSPARENT);
//obtenir la taille cliente de la fenêtre
GetClientRect (hwnd, &rect);
//Dessine un rectangle qui sera notre fond
Rectangle(hdc, rect.left,rect.top,rect.right,rect.bottom);
SelectObject(hdc, CreateSolidBrush(RGB(255, 255,0)));
Ellipse(hdc, mon_cercle.x1, mon_cercle.y1, mon_cercle.x2, mon_cercle.y2);
//fin de la procédure de dessinage
EndPaint (hwnd, &ps) ;
return 0 ;
//si faut quitter
case WM_DESTROY:
//alors mettre un message "WM_QUIT" dans la file d'attente
PostQuitMessage (0) ;
return 0 ;
}
//tous les messages dont nous ne nons servons pas sont renvoyés au système
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
cs_ToToL
Messages postés170Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 9 juillet 2008 8 mai 2004 à 11:56
Meme si je fait avec le key up il y aura tjr un acou au depart puisque que sa vien d'un blanc fait par windows donc il y a un blanc de message pendant peut de temps et meme en mettant SystemParametersInfo(SPI_SETKEYBOARDDELAY,0,NULL,NULL); la répétition clavier ne s'enleve pas.