Evenements en C++/CLI

ThePuppetMaster Messages postés 7 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 30 juin 2006 - 29 juin 2006 à 15:56
K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016 - 30 juin 2006 à 17:19
Bonjour,

Est 'il possible d'implenter simplement des evenements utilisateur en C++/CLI ?
Je m'explique : je souhaite creer une classe qui declenche des evenements, que je souhaite definir (les evenements) dans mon code principal, afin d'ajouter du texte un une richtextbox, par exemple, un peu a la maniere des evenements VB, que l'on declare dans la classe, et que l'on definit apres avoir implementer la classe.

qqun a une idee ? Merci !

5 réponses

K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
29 juin 2006 à 23:38
ta classe peut reçevoir en paramètres des pointeurs sur fonctions, ainsi, il te suffit d'envoyer tes fonctions en paramètres et la classe pourra les appeler.

exemple:
class CLS
{
   void MaFonction(bool __cdecl(int,int));   // déclaration de la fonction qui reçoit l'adresse de la fonction servant d'évènement
   bool (*Evenement)(int,int); //déclaration de la fonction évènement
};

void CLS::MaFonction(bool Evt(int a,int b))
{
      Evenement = Evt;  // affectation de son adresse à la fonction évènement 
      Evenement(10,20); // appel de la fonction évènement
}

// dans ton prog

bool eve(int,int);
CLS cls;

main
{
   cls.MaFonction(eve);
}

bool eve(int a, int b)
{
    // code
}

voila, j'éspère que cette solution te convient et que j'ai bien expliqué

K@zuya
0
ThePuppetMaster Messages postés 7 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 30 juin 2006
30 juin 2006 à 11:53
Merci de ta réponse, et oui c'etait suffisement clair ^^
Par contre tel que je le comprend, et tel que ça se comporte quand je le test,
C'est que c'est mon programme principal qui genere l'evenement ?
Alors que moi ce que je veux c'est que ce soit la classe, mais que ce soit le code que j'aurai defini dans le code principal qui soit executer.
Et la j'ai pas l'impression que ça fonctionne ainsi, a part si je me trompe ;(

Je suis en Visual Studio 2005, si ça peut aider...
0
K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
30 juin 2006 à 12:18
Euh, J'comprends mal c'que tu me dis,
"c'est mon programme principal qui genere l'evenement" ça ça veut dire quoi ?

ce que je crois comprendre c'est que tu as l'impression que le code de l'évènement est dans la classe, main non, l'évènement c'est la fonction "eve" dans mon code. Et cette fonction c'est dans le prog principal que tu la code, c'est exactement comme en VB.

pour que l'évènement eve soit déclanché par la classe, il faut qu'il y ait une condition dans la classe.

cls.MaFonction(eve); // cet appel sert seulement à déclarer "eve" comme la fonction evenement.
dans mon, code, cette fonction appelle eve juste apres mais ça tu peux le gérer autrement, par exemple,
ta classe contient un thread qui tourne en parallèle avec ton prog et qui surveille l'heure puis appelle Evenement(10,20); lorsqu'il il est minuit.
alors ta fonction "eve" du programme principal sera appellée à minuit.
Je pense que c'est ce que tu cherche à faire.

[mailto:K@zuya K@zuya]
0
ThePuppetMaster Messages postés 7 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 30 juin 2006
30 juin 2006 à 16:04
Bah en fait j'ai mit une messagebox dans eve, pour voir comment ça fonctionné, et pour moa c'est cls.MaFonction(eve); qui declenche l'evenement. car kan je lance le programme ma message box apparait.
En tout cas tes explications m'eclaire deja sur pas mal de choses, merci.
En fait j'pense que j'mexplique pas comme il faut, le mieu c'est de donner un exemple concret de ce que je veut faire:
Donc voici un exemple : une classe socket.
Je veut que dans ma classe socket j'ai un evenement OnConnect (comme le RaiseEvent en VB) que je genere des que le socket est connecté.
De l'autre coté j'ai des forms, un bouton et une richtextbox.
Et en fait ce que je veut c pouvoir redefinir OnConnect dans la partie "Form" pour que ça m'ajoute du texte dans la richtextbox.

Donc voila, j'sais pas si c moi qui pige keudalle mais j'ai vraiment du mal a cerner pquoi c si compliké en C++/CLI alors qu'en VB, VB.NET c'est si simple ;(
En tout cas merci de tes efforts
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
30 juin 2006 à 17:19
J'ai fait une classe qui fait ça, Tu n'as qu'a la downloader http://www.kazuya.fr/

K@zuya
0
Rejoignez-nous