[VC++6] Quand initialiser les positions de mes objets?

Quand initialiser les positions de mes objets? [VC++6] - C++ - Programmation

Marsh Posté le 26-01-2004 à 18:32:47    

Salut!
 
J'ai une question simple :  
 
Mon appli (Single Document) se contente de créer un document, et des objets associés (disons des cercles), dont je voudrais pouvoir initialiser les positions, mais une fois seulement que je connais la taille avec laquelle la fenêtre de ma CView va s'ouvrir!
 
A quel moment puis-je donc obtenir cette taille et lancer mon initilisation (appelons cette initialisation : pDoc->InitPos();)
 
Je précise que je tiens à exécuter cette initilisation une seule fois seulement, au début!
 
pour l'instant, la seule méthode que j'ai trouvé est d'utiliser le OnSize de ma View, comme ceci :
 

Code :
  1. CFromToCallsDoc* pDoc;
  2. CView::OnSize(nType, cx, cy);
  3. // TODO: Add your message handler code here
  4. pDoc = GetDocument();
  5. if (!pDoc->alreadyInitialized)
  6.    pDoc->InitPos();


 
Le problème avec celà est que je suis obligé de maintenir un booléen dans mon document, indiquant si celui ci a déja été initialisé.
 
Y a t il une autre solution plus élégante?

Reply

Marsh Posté le 26-01-2004 à 18:32:47   

Reply

Marsh Posté le 26-01-2004 à 18:34:35    

Ben pourquoi t'initialises pas tes positions dans le constructeur de ta CView ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-01-2004 à 18:37:44    

Bon laisse tomber le constructeur, ça marchera pas dans ton cas. Passe plutot par la méthode OnCreate(), ou mieux, OnInitialUpdate()


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-01-2004 à 19:08:02    

Exact, dans le constructeur, ça ne marchera pas, car au moment où elle est construite, la View ne sait pas combien elle va mesurer.
 
Concernant les OnCreate et les InitialUpdate, elles ne sont appelées qu'une fois? Et lorsqu'elles sont appelées, la View est déja dimensionnée? (je peux donc obtenir la taille de la partie cliente?)

Reply

Marsh Posté le 03-02-2004 à 16:19:08    

Me revoilà!
 
En fait, je viens de me rendre compte que quand on fait un GetClientRect lors de l'appelle à CView::OnInitialUpdate(), cette méthode renvoie les dimensions de la fenêtre complète, barre de titre comprise, donc, je ne peux pas placer avec beaucoup de rigueur mes objets graphiques, qui seront visibles à l'écran alors que la barre de titre sera là!
 
(autrement dit, dans mon cas, mon CRect a un Bottom de 544 lors de l'InitialUpdate alors qu'il a ensuite un Bottom de 502 tout le long...)
 
normal?

Reply

Marsh Posté le 05-02-2004 à 15:44:16    

Bon, puisque personne ne saura me dire pourquoilors de l'appell du InitialUpdate() de ma view, la zone client est chez moi un petit peu plus grande (544 pixels de haut) que lors des appels standard de OnDraw() qui se font plus tard (502 pixels de haut), je vais poser une autre question :  
 
Lors d'une appli SDI sous Visual C++ 6, comment faire poure redimensionner ou plutot dimensionner la fenetre principale avant qu'elle ne s'affihe?

Reply

Sujets relatifs:

Leave a Replay

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