Dessin d'un bouton à enfoncer en allegro ( c )

Contenu du snippet

Je fais de la programmation dans le cadre scolaire et dans mes programmes j'ai souvent eu à dessiner des boutons que l'utilisateur pouvait cliquer pour changer de fenetre ou choisir une valeur, etc ..
Dans ce sous-programme on dessine un bouton sur lequel on va pouvoir cliquer et qui s'utilise comme un rectfill() : on choisit la position des coins et sa couleur.

Les paramètres du tube sont :
- la bitmap sur laquelle on dessine
- la position en x du coin hg
- la position en y du coin hg
- la position en x du coin bd
- la position en y du coin bd
- la couleur du bouton "au repos"
- la couleur du bouton qd la souris passe dessus
- la profondeur du relief ( de 1 à 5 )
- le texte à ecrire sur le bouton

Le retour est un 1 si l'utilisateur a cliqué, un 0 sinon.

Source / Exemple :


/*
Dessin d'un bouton que l'on peut cliquer avec la souris.
Faites moi part de vos impressions :-P : Mds_138@hotmail.com

¤Mds¤

  • /
int draw_bouton(BITMAP *buffer, int posx, int posy, int pos2x, int pos2y, int color1, int color2, int profondeur, char* texte) { int pos_mouse=1; // Pour savoir si la souris est sur le bouton int color; // Pour definir la couleur du bouton int c_hg; // Couleur du coin haut gauche int c_bd; // Couleur du coin bas droite int texte_x; // Position du texte en x int texte_y; // Position du texte en y int retour=0; // Renvoi int i; if(profondeur >5)profondeur=5; if(profondeur <=0)profondeur=1; // Si la souris est sur le bouton on modifie la valeur de pos_mouse if(mouse_x>=posx && mouse_x<=pos2x && mouse_y>=posy && mouse_y<=pos2y) { pos_mouse=2; // Si l'utilisateur clique sur le bouton if(mouse_b & 1) { pos_mouse=3; // On renvoie un 1 si le bouton est enfoncé retour=1; } } else pos_mouse=1; // Changement des couleurs pour les effets de perspective et pour savoir si la souris est sur le bouton switch(pos_mouse) { case 1:c_hg=255;c_bd=0; color=color1; texte_x=(posx+pos2x)/2; texte_y=(posy+pos2y)/2; break; case 2:c_hg=255;c_bd=0; color=color2; texte_x=(posx+pos2x)/2; texte_y=(posy+pos2y)/2; break; case 3:c_hg=0;c_bd=255; color=color2; texte_x=((posx+pos2x)/2)+profondeur; texte_y=((posy+pos2y)/2)+profondeur; break; } // Dessin de lignes blanches et noires pour la perspective for(i=0;i!=profondeur;i++) { hline(buffer,posx,posy+i,pos2x-i,makecol(c_hg,c_hg,c_hg)); vline(buffer,posx+i,posy,pos2y-i,makecol(c_hg,c_hg,c_hg)); hline(buffer,posx+i,pos2y-i,pos2x,makecol(c_bd,c_bd,c_bd)); vline(buffer,pos2x-i,posy+i,pos2y,makecol(c_bd,c_bd,c_bd)); } // Remplissage du bouton rectfill(buffer,posx+profondeur,posy+profondeur,pos2x-profondeur,pos2y-profondeur,color); // Ecriture du texte textprintf_centre(buffer,font,texte_x,texte_y,makecol(255,255,255),"%s",texte); // Renvoi : 1 si le bouton a été cliqué, 0 sinon return retour; }

Conclusion :


¤Mds¤

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.