[MFC] Taille fenetre, GetClient & GetRect [RESOLU]

Taille fenetre, GetClient & GetRect [RESOLU] [MFC] - C++ - Programmation

Marsh Posté le 26-11-2003 à 11:47:58    

Bonjour à tous!
 
bon, j'ai un petit pb et j'aimerais que qq1 m'éclaire sur le sujet.
J'ai un objet dérivé d'un CDialog (CTstDlg), contenant un controle (CGCtrl).
Comme je veux gérer les éventuels redimensionnements de fenêtre, voilà comment je procède.
 
1/ dans le InitDialog de CTstDlg, je fais un GetWindowRect afin d'avoir le rectangle de mon dialogue. Je fais aussi un CGCtrl.GetWindowRect pour avoir celui de mon ctrl. Ensuite, je fais la soustraction des left et top de chaque rect, ça me donne en gros l'offset du ctrl dans mon dialogue.
 
2/ dans le onsize de CTstDlg, je refais un GetWindowRect et je fais un right - left et un top - bottom pour avoir les nouvelles tailles de mon dialogue (je sais, il y avait plus simple avec GetClientRect par exemple). Enfin, je fais un CGCtrl.MoveWindow avec comme parametres les deux offset calculés dans le 1 et les nouvelles tailles basée sur le taux d'agrandissement calculé.
 
Le pb, c'est que dans le 1/ mes deux offsets sont différents de ce que je vois dans l'éditeur de ressources de VC++. Par exemple, le calcul me donne un décalage en Y de 226, alors que dans la fenetre d'édition, la reglette me donne environ 108. Du coup, quand je fais le MoveWindow sur mon controle, celui ci se retrouve plus bas que prévus.
 
QQ1 a une idée la dessus ? Merci!


Message édité par TheFox37 le 27-11-2003 à 23:44:06
Reply

Marsh Posté le 26-11-2003 à 11:47:58   

Reply

Marsh Posté le 26-11-2003 à 13:00:12    

A tout hasard, y en a pas un en coordonnées écran, et l'autre en coordonnées feuille ? Pour passer de l'un à l'autre, doit y avoir qq chose comme ScreenToClient() et le "symétrique" ClientToScreen (ça ne gère que des POINT, donc x et y).

Reply

Marsh Posté le 26-11-2003 à 13:48:31    

j'ai testé le screentoclient, et ca me donne exactement la même différence de 226 et non 108

Reply

Marsh Posté le 26-11-2003 à 15:50:43    

Up si ça inspire quelqu'un...
 
Les objets sont agrandis avec la feuille ? Sinon, ils devraient suivre le move tout seuls, normalement ? (la tête ds la chimie, pas très "branché" ).

Reply

Marsh Posté le 27-11-2003 à 14:56:22    

Euh si le seul truc qui t'embête c'est que les offset et les tailles sont pas celles affichées par l'editeur de dialogue de VS, t'inquiete pas. L'editeur de dialogue t'affiche les coordonnées en DLU, pas en pixels. La taille d'une DLU dépends de la police que tu utilises dans ton dialogue. Maintenant si tu veux faire un dialogue qui se redimmensionne proprement, sans avoir l'impression que tes controles "sautent sur place" au premier redimmensionnement, fait toi une fonction genre MakeLayout() qui place tous les controles de ta boite en fonction de sa taille, et appele la depuis ton OnInitDialog() et ton OnSize().

Reply

Marsh Posté le 27-11-2003 à 20:08:10    

ca doit etre une betise, mais p-e l'une des 2 indications est donnée par rapport au rectangle formé par les limites "exterieur" de la feuille et l'autre par rapport au rectangle formé par les limites interieurs ? (le dacalage serait donc du a l'epaisseur des bords et de la barre de titre ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 27-11-2003 à 21:56:51    

GetClientRect() donne la taille de la zone sous la barre de titre (zone client), GetWindowRect() donne (normalement) la taille "totale" de la feuille (ou du bouton, etc..).

Reply

Marsh Posté le 27-11-2003 à 23:43:24    

RESOLU : en fait, il faut convertir seulement le Rect du controle avec le ClientToScreen
 
merci à tous pour votre aide !


Message édité par TheFox37 le 27-11-2003 à 23:44:35
Reply

Sujets relatifs:

Leave a Replay

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