wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 4
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Système
» [wxApp::Yield]
Détails du snippet : [wxApp::Yield]
Informations sur l'auteur de ce snippet :


Hors ligne
Gandi (Membre)
Lieu: Clermont Ferrand
Inscrit le : 10-10-2007
Messages: 205
Snippets: 4
Tutoriels: 0
Introduction / Description :
Pour ceux qui utiliseraient wxYield, sachez que maintenant il faut utiliser
wxApp::Yield. ( le fonctionnement de cette fonction étant encore pas trop claire dans ma tête, je ne l'expliquerais pas tout de suite :p )
Contenu du snippet :
Yield n'est pas une fonction static, du moins pas encore. Elle a besoin d'accéder à des membres non static de wxApp ou MyApp.

Lorsque vous déclarez votre "MyApp" qui dérive de wxApp 'noubliez pas de mettre le DECLARE_APP(MyApp)  juste après la déclaration de votre classe. C'est cette macro qui va créer l'accesseur  à votre MyApp.

Code wxWidgets:

 
class MyApp : public wxApp
{
 
public:
    virtual bool OnInit();
 
};
DECLARE_APP(MyApp)
 


Puis le IMPLEMENT_APP dans votre .cpp mais lui vous l'avez forcément il me semble , mais je le met quand même au cas où :p.

Code wxWidgets:

IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
...
return true
 
}
Explications finales :
Ensuite incluez "MyApp.h" dans l'unité où vous voulez utiliser Yield.
Il vous suffit alors d'écrire ça :

Code wxWidgets:

 
wxGetApp().Yield() ;
 


vous pouvez utilisez wxGetApp() pour accédez à d'autres fonctions de votre MyApp et des classes Parentes.

Voici les deux liens de la doc concernent ce snippet :
Application initialization and termination
wxApp
Commentaires
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1364
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
C'est vrai que la fonction wxYield() a été marquée comme "dépréciée" depuis les dernières versions de wxWidgets.
Elle est encore utilisable, car elle est conservée pour des raisons de compatibilité avec les versions antérieures de wx, mais tant qu'à faire, autant ne plus l'utiliser...

En clair, wxApp::Yield() correspond au DoEvents() que l'on trouve en Visual Basic : même si cette fonction a tendance à ralentir l'exécution du prog, elle permet d'intercepter les événements, et de mettre à jour la gui.

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
Gandi (Gourou de la secte)
Lieu: Clermont Ferrand
Inscrit le : 10-10-2007
Messages: 205
Snippets: 4
Tutoriels: 0
Hors ligne
Merci :p , j'était loin du compte, mais j'avais au moins compris que ça avait un rapport avec les évènements.
----------
Je viens de rechercher à nouveau cette fonction. J'ai besoin d'attendre l'affichage d'une frame.
J'ai le même résultat avec les deux autres méthodes. Au final je garde wxSafeYield() ;

Code wxWidgets:

 
    wxSafeYield() ;
 

ou

Code wxWidgets:

 
    while( wxTheApp->Pending() )
            wxTheApp->Dispatch() ;
 

----------
Par contre si ça boucle sur wxSafeYield() ; c'est qu'il y a des évènements qui tourne en boucle.

Pour ma pare cela provenait du parent. J'ai donc stopper temporairement les évènements du parent :

Code wxWidgets:

 
this->GetParent()->SetEvtHandlerEnabled( false ) ;
...
this->GetParent()->SetEvtHandlerEnabled( true ) ;
 

Dernière modification par Gandi (02-01-2012 12:07:55)


"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1364
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Comment ça se fait qu'il y ait des événements qui tournent en boucle ?

Tu as réussi à les identifier ou pas ?

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
Gandi (Gourou de la secte)
Lieu: Clermont Ferrand
Inscrit le : 10-10-2007
Messages: 205
Snippets: 4
Tutoriels: 0
Hors ligne
Je ne suis pas sûr mais je parierai bien sur les évènements OnPaint des parents. Mais dans mon cas la fenêtre enfant est affiché en plein écran et au-dessus du parent.

"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Système
» [wxApp::Yield]