begin process at 2008 07 04 12:15:15
1 204 588 membres
129 nouveaux aujourd'hui
14 116 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Déplacement d'image BMP avec Win APi [ Windows / GUI ] (hiroko)

Déplacement d'image BMP avec Win APi le 14/05/2008 22:33:57

hiroko
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);
}



Re : Déplacement d'image BMP avec Win APi le 15/05/2008 02:12:17

jfrancois
Réponse acceptée !
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


Re : Déplacement d'image BMP avec Win APi le 15/05/2008 16:31:00

hiroko
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

Re : Déplacement d'image BMP avec Win APi le 15/05/2008 18:18:55

jeffy131
> 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

Re : Déplacement d'image BMP avec Win APi le 16/05/2008 10:29:28

hiroko
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.



Classé sous : wm, wparam, hdc, sens, if

Participer à cet échange

Pub



Appels d'offres

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS