Déplacement d'image BMP avec Win APi

Résolu
cs_hiroko
Messages postés
3
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
16 mai 2008
- 14 mai 2008 à 22:33
cs_hiroko
Messages postés
3
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
16 mai 2008
- 16 mai 2008 à 10:29
En esperant etre dans la bonne catégorie...

Voilà mon problème,
je dois créer un Snake en C avec Win API
Et j'ai des gros problème d'affichage.

Je cherche déjà à afficher une image et a la faire déplacer mais pas moyen d'arriver a quelque chose de convaincant.
Je recherche ame charitable voulant bien sa pencher sur mon problème.

J'ai un menu qui me lance un Timer :

    case WM_COMMAND:
            {
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
            if(LOWORD(wParam) == IDM_START) SetTimer(hwnd,1,100,NULL);

            return 0;
            }

et ensuite je gère ma direction comme ceci :

        case WM_TIMER:
        {
       if (sens==1)  {postetex=postetex-5;}
       if (sens==2)  {postetey=postetey-5;}
       if (sens==3)  {postetex=postetex+5;}
       if (sens==4)  {postetey=postetey+5;}

       HDC hdc=GetDC(hwnd);
         AfficheImage(hdc,postetex,postetey,tete);
       ReleaseDC(hwnd,hdc);
       return 0;
      }

     case WM_CHAR :
        {
           if(wParam=='z'){sens=2;}
           if(wParam=='q'){sens=1;}
           if(wParam=='d'){sens=3;}
           if(wParam=='s'){sens=4;}
           return 0;
        }

le problème reste l'affichage de mon Bitmap à la bonne position avec l'effacement du reste.
Là je le fais dans le TIMER
mais je n'arrive pas à le passé dans la fonction WM_PAINT sinon tout plante.
et je ne peu pas effacer les positions précédentes...

Voici aussi ce que j'ai dans ma fonction afficheimage() :

    #include <windows.h>

void AfficheImage(HDC hdc, int ix, int iy, char *filename)
{
  HBITMAP hBmp;
  hBmp=(HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  DrawState(hdc,NULL,NULL,(LPARAM)hBmp,NULL,ix,iy,0,0,DST_BITMAP);
  DeleteObject(hBmp);
}

4 réponses

cs_jfrancois
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
2
15 mai 2008 à 02:12
Bonsoir,

1) SetFocus(hWnd) sur la fenêtre après appui sur le bouton démarrer sinon c'est lui qui garde le focus et les saisies au clavier sont sans effet.

2) WM_CHAR change l'orientation, OK (mais tenir compte de la casse).

3) WM_TIMER change la position puis lance un InvalidateRect(hWnd,NULL,TRUE); pour forcer l'affichage.

4) L'affichage se fait dans WM_PAINT mais pas de chargement de l'image à chaque fois ! 1 fois suffit dans WM_CREATE.

5) Pour éviter l'effet de clignotement du contenu de la fenêtre, il faudra utiliser la technique du "off screen" en passant par un DC intermédiaire.

Jean-François
3
cs_hiroko
Messages postés
3
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
16 mai 2008

15 mai 2008 à 16:31
Merci déjà pour la réponse.
Mais j'ai besoin de quelque précision (désolé débutant...).

1) Pour le Setfocus OK! je suppose que une fois changé c'est bien là qu'il faut le mettre :

    case WM_COMMAND:
            {
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
            if(LOWORD(wParam) == IDM_START)  {SetTimer(hwnd,1,100,NULL);SetFocus(hwnd);}

            return 0;
            }

2) et par contre c'est après que ça se corse. J'avais essayer de faire un invalidaterect sur toute ma surface avant de réaffiché mes élément mais du coup c'était tout blanc tout le temps. Ou alors j'ai pas tout compris ce que tu me disais.

3) Peux-tu m'en dire en plus plus sur comment garder mon image pour ne pas la recharger à chaque fois?

Merci hiroko
0
jeffy131
Messages postés
123
Date d'inscription
samedi 14 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2009
1
15 mai 2008 à 18:18
> je dois créer un Snake en C avec Win API

Des dizaines d 'exemples complets ont été postés sur Usenet depuis plus de 15 ans.
Donc voir sur les ngs des win api
0
cs_hiroko
Messages postés
3
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
16 mai 2008

16 mai 2008 à 10:29
Merci pour cette réponse...
par contre c'est peu etre du à mon incompétence
mais si jamais t'a un lien vers les sources d'un Snake en C avec Win API je suis preneur.
0