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

  FORUM HardWare.fr
  Programmation
  C++

  [VC++] Problème de Rect et de coordonnées...[Solution et Question]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Problème de Rect et de coordonnées...[Solution et Question]

n°394242
Yoyo@
Posté le 14-05-2003 à 20:36:02  profilanswer
 

Salut!
 
Voila, j'ai un petit probleme.
J'explique en gros l'environnement :
J'ai fait une petite appli SDI, avec une FormView et un Doc (la FormView me permet juste d'avoir des controles du type Dialog)
 
Dans l'une des méthodes du doc, j'ai mle morceau de code suivant :
 

Code :
  1. POSITION pos = GetFirstViewPosition();
  2. if (pos != NULL)
  3. {
  4.   CView* pView = GetNextView(pos);
  5.   CRect rect;
  6.   pView->GetClientRect(&rect);
  7. ...


 
A l'issue de ce morceau de code, j'aurais voulu avoir le bon object Rect dans lequel je puisse récupérer les coordonnées de ma fenetre view...(donc, a priori, les coordonnées de la fenetre view que je peux dimensionner grace à Visual...)
 
Le probleme, c'est que le Rect que j'obtiens possèdeles caractéristiques suivantes :
top = 0
left = 0
bottom = 948
right = 661
 
Quelle que soit la fenetre que je dessine...
Par exemple, avec une petite fenetre, j'aurais aimé et espéré avoir genre bottom = 300 et right = 200...
 
J'ai besoin de ces valeurs pour positionner des objets dans ma fenetre...
 
Est ce que queelqu'un saurait me dire d'ou vient ce probleme? Et d'ou sort ce Rect?
 
J'espère n'avoir pas été trop confus :)
 
Merci,
 
Yoyo*


Message édité par Yoyo@ le 15-05-2003 à 14:10:05

---------------
It's nice to be important, but it's more important to be nice
mood
Publicité
Posté le 14-05-2003 à 20:36:02  profilanswer
 

n°394304
youdontcar​e
Posté le 14-05-2003 à 21:16:50  profilanswer
 

GetClientRect() renvoie la taille de ta fenêtre, GetWindowRect() sa position.

n°394335
VisualC++
J'va y penser ...
Posté le 14-05-2003 à 21:44:04  profilanswer
 

Pas vu et lu surtout correctement desole le post efface c t une connerie.
 
Ce que tu cherches c GetWindowRect qui te retourne les dimension du rectangle de l'objet CWnd au format screencoordinate. Les dim inclu les scrolbar si present.
Et utilise ClientToScreen ou l'inverse suivant ce que tu cherches comme coordonnees.

n°394336
youdontcar​e
Posté le 14-05-2003 à 21:45:19  profilanswer
 

VisualC++ a écrit :

Ce qui n explique pas pkoi en faisant Client il a pas les dim de sa fenetre.

Effectivement, j'avais mal lu :D
 
edit : hmmmmm .... :D
 
edit2 : A priori tu avais raison, il teste sa view plutôt que la fenêtre dans la view. (En tout cas j'ai du mal à piger ...)


Message édité par youdontcare le 14-05-2003 à 21:48:52
n°394350
VisualC++
J'va y penser ...
Posté le 14-05-2003 à 21:58:02  profilanswer
 

Vi pas sur que recupere la bonne view

n°394532
Yoyo@
Posté le 15-05-2003 à 00:13:58  profilanswer
 

Bo, bah que je fasse GetClientRect ou GetWindowRect, je n'obtiens pas ce que je veux...
 
Et pour preuve, quand je redimensionne mon Dialog dans le designer du Visual C++, les valeurs restent les memes...
 
En fait, la différence entre GetClientRect et GetWindowRect tient au zéro de référence que l'on prend...Mais ca ne change rien au fait que je trouve des valeurs non cohérentes (et qui ne semblent pas dépendre de la taille de mon Dialog)
 
Que faire?
 
Yoyo*


---------------
It's nice to be important, but it's more important to be nice
n°394736
YungMakko
Posté le 15-05-2003 à 10:49:07  profilanswer
 

Yoyo@ a écrit :

Bo, bah que je fasse GetClientRect ou GetWindowRect, je n'obtiens pas ce que je veux...
 
Et pour preuve, quand je redimensionne mon Dialog dans le designer du Visual C++, les valeurs restent les memes...
 
En fait, la différence entre GetClientRect et GetWindowRect tient au zéro de référence que l'on prend...Mais ca ne change rien au fait que je trouve des valeurs non cohérentes (et qui ne semblent pas dépendre de la taille de mon Dialog)
 
Que faire?
 
Yoyo*


 
GetClientRect() retourne les coordonnées de la partie cliente de la fenêtre (sans la barre de titre) par rapport à la fenêtre elle même: Tu obtiens toujours 0 pour les membres left et top de ton rect.
 
GetWindowRect() retourne les coordonnées de la fenêtre par rapport au repère de l'ecran (donc les membre left et top, donne la position du coin supérieur gauche de la fenêtre par rapport à l'ecran).
 
Si tu veux convertir les coordonnées du rectangle obtenu via GetWindowRect() en coordonnées relatives à la fenêtre, il suffit d'appeller la fonction membre de CWnd, ScreenToClient().
Pour l'inverse, ClientToScreen().
 
 


---------------
In tartiflette, we trust!
n°395027
Yoyo@
Posté le 15-05-2003 à 14:08:23  profilanswer
 

Me revoila...
 
J'ai compris mon erreur.
 
En gros, je ne vous avais aps donné tous les éléments, et ce que je faisais est que, dans le OnNewDocument() de mon document (mon appli est une SDI), j'initialisais une quelconque classe qui me sert a placer des cercles sur ma View. Et le probleme, c'est que j'initialisais cette calsse en utilisant le Rect de la View, et ce Rect me donnait de mauvaises coordonnées, parce que j'ai l'impression quema view est graphiquement initialisée seulement plus loin, en tout cas après le "OnNewDocument()"...
 
En fait, mon problème vient finalement du fait que l'ordre d'enchainement des initilisations dans Visual C++ me parait opaque, je ne sais pas quoi est initilisé quand, et donc, je l'ai eu dans l'os...
 
D'ailleurs, si quelqu'un pouvait m'iader en me disant en gros quelles sont les grandes lignes de l'initialisation d'une appli SDI avec Visual C++, ce serait gentil !  
 
En tout cas, pour le moment, pour initialiser mes points, j'ai juste mis un bouton sur ma view, et quand je clique dessus, ca initialise tout ca... Quand j'aurai comrpis à partir de quel moment je peux etre sur de récupérer la bonne taille de ma view, alors tout ira bien, et je virerai ce bouton temporaire...
 
Merci à vous,
 
Yoyo*


Message édité par Yoyo@ le 15-05-2003 à 14:08:53

---------------
It's nice to be important, but it's more important to be nice

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

  [VC++] Problème de Rect et de coordonnées...[Solution et Question]

 

Sujets relatifs
Un petit probléme avec les methodes Static et Non-Static...[PHP/MYSQL]Parametre dans les URL, probleme de majuscules
[Shell] Petit problème de grepProbleme avec l'attribut READONLY du Tag INPUT
Problème pour installer PHP-NukeQuestion con - pb avec free()
Question sur Dblookupcombobox de Delphi 5 et SQL server 2000Probleme avec Swing...
Probleme de compativilités entre foncitonsPetite question Visual Basic (impression)
Plus de sujets relatifs à : [VC++] Problème de Rect et de coordonnées...[Solution et Question]


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