Variable globale en MFC?

Variable globale en MFC? - C++ - Programmation

Marsh Posté le 03-03-2003 à 15:56:50    

Comment est ce qu'on peut faire pour avoir une variable gloabale en MFC?
Cad une variable que je pourrais voir et modifier depuis n'importe quelle autre classe.
J'avais essaye en la creant dans la classe Doc mais ca ne fonctionne pas. Et je ne comprend pas pourquoi.
 

Reply

Marsh Posté le 03-03-2003 à 15:56:50   

Reply

Marsh Posté le 03-03-2003 à 16:07:28    

Salut,
Tu la mets dans aucune classe, c'est à éviter je pense te diront des gens plus expérimentés que moi sur le sujet...

Reply

Marsh Posté le 03-03-2003 à 16:20:36    

Je confirme :
 
"les variables globales c'est mal"  :non:  
 
Surtout que les MFC fournissent suffisamment de mécanisme pour éviter d'avoir recours aux variables globales :
 
Si ce sont des données, tu les declares dans la classe document et tu y accèdes avec GetDocument()->maVariable


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 03-03-2003 à 16:33:00    

Voici donc une partie du code qui permettra de mieux comprendre.
 
Je me trouve dans la methodes OnOK d'une boite modale.
La boite modale possede un pointeur sur la vue (ptr_view)
La variable que je voudrais "globaliser" est gw de la classe GatewayComm
 
 CComDoc* pDoc = (CComDoc*)ptr_view->GetDocument();
 GatewayComm* ptr_gateway = &pDoc->gw;
        affichage avant
 switch(ptr_gateway->gw_status)
 {
  case GatewayComm::Connected:
   afficher n'importe quoi
   break;
  case GatewayComm::NotConnected:
   afficher autre chose                   break;
  default:
   affichage par defaut
   break;
 }
        affichage apres
 
Voila. J'aurais besoin d'acceder a gw depuis n'importe quel classe donc ma premiere idee etait de mettre cette variable ds le document. Mais le probleme est qu'a l'execution, je ne passe pas dans le switch. Le pgm affiche avant et puis c'est tout, meme pas l'affichage d'apres. Alors d'ou peut venir le probleme?

Reply

Marsh Posté le 03-03-2003 à 16:40:07    

1) Pourquoi passes tu un ptr à la vue alors que c'est plutôt un ptr au document qu'il faudrait passer ?
 
2) le OnOK() est appellé au moment de la sortie donc c'est normal que rien ne s'affiche dans la boite modale
 
3) Pour mettre à jour les vues abonnées à un document, il y a la méthode CDocument::UpdateAllView


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 03-03-2003 à 16:49:31    

Tetragrammaton IHVH a écrit :

1) Pourquoi passes tu un ptr à la vue alors que c'est plutôt un ptr au document qu'il faudrait passer ?


oui, c'est vrai que pour cela je me suis un peu complique la vie pour rien.
 

Tetragrammaton IHVH a écrit :


2) le OnOK() est appellé au moment de la sortie donc c'est normal que rien ne s'affiche dans la boite modale


Je ne fais pas l'affichage dans cette boite modale. En fait je programme pour Pocket PC (tout en boite modale) et pour l'affichage, j'appele une autre boite modale. Ce qui reveins au meme qu'un bete printf je pense mais cette boite n'est jamais appelee. Donc ca ne passe pas par le switch.
 

Tetragrammaton IHVH a écrit :


3) Pour mettre à jour les vues abonnées à un document, il y a la méthode CDocument::UpdateAllView


Je ne vois pqs trop en quoi ca pourrait m'aider. Tu peux m'eclairer.

Reply

Marsh Posté le 03-03-2003 à 16:52:50    

polo021 a écrit :


 
Je ne fais pas l'affichage dans cette boite modale. En fait je programme pour Pocket PC (tout en boite modale) et pour l'affichage, j'appele une autre boite modale.


 
 :ouch: Change de methode, tu te compliques la vie pour rien.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 03-03-2003 à 16:56:18    

Merci pour ta rapidite, ce forum, c'est presque un chat!  :bounce:  
 
Je vais essayer de reflechir a une autre methode mais ca me semblait interessant. De toute facon tous ces affichages, c'est uniquement pour des tests, donc ca n'apparaitra pas ds la version finale.  
 
Je vais essayer autrement alors. Et on verra bien si ca fonctionne.

Reply

Marsh Posté le 03-03-2003 à 17:09:45    

Alors si c'est pour des tests, il est peut être plus facile de faire un "logbook", c'est à dire de stocker les variables de test dans un fichier texte ?
 


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 03-03-2003 à 17:19:39    

Je ne connais pas trop ce principe.  
Mais c sur pocket PC donc pour aller sauver sur un fichier texte et puis aller ensuite l'ouvrir pour regarder son contenu. C'est bcp de ;anipulation. mais je vais suivre ton conseil de trouver une autre methode pour faire mon pgm, en esperant que ca va fonctionner.

Reply

Marsh Posté le 03-03-2003 à 17:19:39   

Reply

Marsh Posté le 03-03-2003 à 17:29:46    

j'ai reussis a me connecter. Donc ca a l'air de fonctionner. J'ai fais au plus simple pour commencer. Donc avec un bouton sur la vue. Le probleme doit etre dut aux boites modales, pointeurs,... c'est vite fait de se tromper.

Reply

Marsh Posté le 28-01-2006 à 14:45:46    

J'aimerais bien savoir comment faire pour déclarer des variables globales dans un prog en MFC... Si vous avez la réponse, ce serait sympa de m'aider!
 
Merci.

Reply

Marsh Posté le 28-01-2006 à 17:00:34    

jercec a écrit :

J'aimerais bien savoir comment faire pour déclarer des variables globales dans un prog en MFC... Si vous avez la réponse, ce serait sympa de m'aider!
 
Merci.


 
Il n'y a pas besoin de définir des variables globales dans un prog MFC :non:  

Reply

Marsh Posté le 28-01-2006 à 20:22:37    

smaragdus a écrit :

Il n'y a pas besoin de définir des variables globales dans un prog MFC :non:


Ben dans mon cas c'est bien plus simple et ça ne vaut vraiment pas la peine de faire autre chose... Enfin bon j'ai trouvé comment faire...

Reply

Marsh Posté le 31-01-2006 à 19:08:25    

Un exemple de globale souvent employée : un objet décrivant l'application et dérivé de CWinApp. Ben oui le AfxGetApp() est pénible et en plus peut poser des problèmes en multithread.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed