Problème de Rect et de coordonnées...[Solution et Question] [VC++] - C++ - Programmation
Marsh Posté le 14-05-2003 à 21:16:50
GetClientRect() renvoie la taille de ta fenêtre, GetWindowRect() sa position.
Marsh Posté le 14-05-2003 à 21:44:04
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.
Marsh Posté le 14-05-2003 à 21:45:19
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
edit : hmmmmm ....
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 ...)
Marsh Posté le 15-05-2003 à 00:13:58
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*
Marsh Posté le 15-05-2003 à 10:49:07
Yoyo@ a écrit : Bo, bah que je fasse GetClientRect ou GetWindowRect, je n'obtiens pas ce que je veux... |
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().
Marsh Posté le 15-05-2003 à 14:08:23
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*
Marsh Posté le 14-05-2003 à 20:36:02
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 :
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