Hop à peine le temps de respirer que je vous propose la suite du 'tutorial' précédent ! Nous avions programmé une zoulie fenêtre que l'on pouvait déplacer, iconifier et fermer.
Je vous propose cette fois-ci de charger une image bmp dans notre fenêtre, et en profiter pour voir comment l'on peut gérer les 'redraw' !
Voici notre exemple modifié:
On ouvre la fenêtre, on lui donne un titre (j'ai mis "SOTB !" à la place de "Pas Glop !", vous verrez pourquoi plus loin !)
Ensuite nouveauté: chargement de l'image bmp "fond.bmp". Ici l'image à télécharger (clic droit puis "enregistrer l'image sous...").
L'instruction IF EXIST est la même que sur ATARI ST: on teste si le fichier existe, si oui l'instruction adr&=LOADBMP("fond.bmp") charge l'image à l'adresse adr&. On n'a pas besoin dans ce cas de réserver de mémoire, le GFW s'en occupe tout seul...
Dans notre boucle REPEAT/UNTIL on a ajouté le test pour le redraw: IF MENU(1)=21
Le redraw
Le redraw (ou redessin) est le rafraîchissement du contenu d'une fenêtre ou d'un formulaire, qui avait été caché par un(e) autre.
En gros, quand notre fenêtre aura été masquée par une autre et qu'elle reviendra en premier plan, il va falloir redessiner son contenu, sinon on aura droit à un rectangle blanc à la place de la partie qui était masquée !
Ben oui ça ne se fera pas tout seul, c'est à nous de le faire ! Heureusement L'instruction MENU() est là pour nous aider:
A noter que l'on aurait pu mettre IF WM_PAINT qui correspond à IF MENU(1)=21
S'il y a effectivement besoin d'un redessin d'une partie de la fenêtre, on saute à la PROCEDURE redraw et on réaffiche tout le fond dans la fenêtre à l'aide de la fonction PUT x,y,adr& qui affiche aux coordonnées x et y de la fenêtre l'image qui se trouve à l'adresse adr&
Les puristes me diront qu'on ne pourrait redessiner que la partie effacée puisque MENU(7) à MENU(10) nous en donne les coordonnées. C'est vrai, mais nous en resterons là pour le moment.
Quand on quitte le programme (clic sur la croix de fermeture), on n'oublie pas de fermer la fenêtre CLOSEW #1, puis de libérer la zone mémoire où se trouvait l'image (FREEBMP adr&)
Une fois avoir vu l'image, vous avez peut-être compris pourquoi j'ai changé le titre ? En effet "SOTB" signifie "Shadow Of The Beast".
Voici notre fenêtre après chargement de l'image:

Je vous propose de voir tout au long de ces tutoriaux comment refaire l'intro animée du jeu en GFW !
Dans le prochain chapitre je vous expliquerai comment programmer un écran "logique" en mémoire afin de pouvoir travailler sur plusieurs écrans cachés.