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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°576472
TheFox37
pourtant chez moi, ça marche
Posté le 26-11-2003 à 11:47:58  profilanswer
 

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
mood
Publicité
Posté le 26-11-2003 à 11:47:58  profilanswer
 

n°576551
Carbon_14
Posté le 26-11-2003 à 13:00:12  profilanswer
 

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).

n°576575
TheFox37
pourtant chez moi, ça marche
Posté le 26-11-2003 à 13:48:31  profilanswer
 

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

n°576768
Carbon_14
Posté le 26-11-2003 à 15:50:43  profilanswer
 

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é" ).

n°577489
Anerty
Posté le 27-11-2003 à 14:56:22  profilanswer
 

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().

n°577769
blackgodde​ss
vive le troll !
Posté le 27-11-2003 à 20:08:10  profilanswer
 

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 )-
n°577871
Carbon_14
Posté le 27-11-2003 à 21:56:51  profilanswer
 

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..).

n°577934
TheFox37
pourtant chez moi, ça marche
Posté le 27-11-2003 à 23:43:24  profilanswer
 

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

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

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

 

Sujets relatifs
reload de le fenêtre au focus de la fenêtre (une seule fois...)[MFC] Drag and Drop sur CEdit, quel message ?
[C++] Comment prendre le nom de l'autheur (résolu) ?défi de la semaine : fonction retournant la taille d'un tableau
programmation windows -> fenetre et threadDLL COM en MFC
quelqu'un sait comment choisir les dimensions d'une nouvelle fenetre?[MFC] applications mdi
[C] Taille d'un tableau d'int ?MIDP linux & JARs (résolu)
Plus de sujets relatifs à : [MFC] Taille fenetre, GetClient & GetRect [RESOLU]


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