Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1427 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Fonction membre en paramètre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction membre en paramètre

n°1446916
casafa
Posté le 24-09-2006 à 22:08:41  profilanswer
 

Bonjour,
 
J'esseye de faire une GUI en openGL; voici comment je fait pour créer un bouton :
myButton = new button("okDefault.tga", "okClick.tga", "okFocus.tga", 0.0, 8.0, 10.8, 12.725);
Donc les 3 premiers paramètres sont les images du bouton et les 4 derniers se sont les coordonnées.
 
Mon problème : comment gérer les évènements ? J'aurais bien voulu un truc du genre :  
myButton = new button("okDefault.tga", "okClick.tga", "okFocus.tga", 0.0, 8.0, 10.8, 12.725, uneClasse::fctOnClick);
Et quand la classe button détecte un click de souris sur le bouton, elle exécute la fonction uneClasse::fctOnClick.
 
Mais est-il possible de passer une fonction membre en paramètre ? Si oui comment ?
 
Et si ce n'est pas possible : quel solution me reste-t-il ? J'ai vu que wxWidgets utilise les macro pour les évènements mais comment est-ce que ça fonctionne ?
 
Merci d'avance...


Message édité par casafa le 24-09-2006 à 22:09:25
mood
Publicité
Posté le 24-09-2006 à 22:08:41  profilanswer
 

n°1446925
fra0
Posté le 24-09-2006 à 23:06:15  profilanswer
 

y'a tout plein de façons de le faire,
avec les templates par exemple
 

Code :
  1. struct MessageHandler
  2. {
  3.        void execute() // [edit] mieux en virtual void /*ou autre type*/ operator()(/*ou autres paramètres*/)
  4.        {
  5.             std::cerr<<"Action !\n";
  6.        }
  7. };
  8. template<class Handle>
  9. struct Button
  10. {
  11.        Handle onClick;
  12.      
  13.        int x,y;
  14.      
  15.        Button(int _x=0, int _y=0, Handle _event=Handle()) : x(_x), y(_y), onClick(_event)
  16.        {
  17.        }
  18.      
  19.        void click()
  20.        {
  21.               onClick.execute();
  22.        }
  23. };
  24. int main()
  25. {
  26.     Button<MessageHandler> button;
  27.     button.click();
  28. }


Message édité par fra0 le 25-09-2006 à 00:43:19
n°1446944
bjone
Insert booze to continue
Posté le 25-09-2006 à 02:15:19  profilanswer
 

sinon tu refais la méthode classique avec queue de messages. (tu mets en queue un ID ou l'adresse du button).
 
sinon vu que c'est de l'OpenGl, et si c'est pour un jeu, t'as pas vraiment un contexte de serveur graphique style serveur X ou GDI, donc tu peux très bien tester bouton par bouton..
 
class Button
{
public:
   float x, y, width, height;
   string Text;
   bool Hit( float mx, float my);
};
 
vector<Button> GUI;
 
game_create_main_gui()
{
   GUI.resize(5);
   GUI[0].Text="New Game";
   GUI[0].x=0.4;
   GUI[0].width=0.6;
 
   ...  
}
 
int game_click_gui(float x, float y)
{
    for( int i = 0 ; i < GUI.size() ; ++i )
        if( GUI[i].Hit( x,y ) )
            return i;  
}
 
et tu polles le clicage de ton interface (quand tu as un évenement de click souris) avec game_click_gui() par exemple.


Message édité par bjone le 25-09-2006 à 02:16:05

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Fonction membre en paramètre

 

Sujets relatifs
[PHP] adapter un script en une fonctionJavascript: Fonction en paramètre
Changer un paramètre NLS sur Client Oracle (XP)J'aimerais modifier légérement cette fonction PHP, un peu d'aide svp
[vaguement résolu] surcharger __getattribute__Fonction Autoopen()
fonction getBytes() de java en phpDimensions d'un div en fonction de son contenu
[Access][VBA] Construction d'un lien HTML fonction de plusieurs champs 
Plus de sujets relatifs à : Fonction membre en paramètre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR