Bonjour a tous,
je cherche a implémenter une classe (équivalente aux QGridLayout de QT) en win 32, cependant je galère un peu.
J'utilise CreateRectRgn pour créer des régions rectangulaire et SetWindowRgn pour mettre un widget a l'intérieur d'une région.
Si toute les region sont de la même taille, ce n'est pas trop dur cependant il faut tenir compte de pleins de paramètres :
- Certain "Widget" ont une taille minimale et / ou maximal (d'autre une taille fixe)
- Certain "Widget" ont un colspan et / ou rowspan different de 1.
J'avais implementer la version ou tous les block étaient de la même taille, mais la c'est plus dur. J'ai du mal a écrire l'algo en "francais".
Dans la classe,
+ je stock un vecteur de structure contenant pour chaque widget : (VEC)
----> un HWND du widget
----> la position vertical
----> la position horizontal
----> le colspan
----> le rowspan
----->region associee (HRGN) initialement a NULL
+ le nombre max de colonne (MX)
+ le nombre max de ligne (MY)
+ La marge entre chaque widget verticalement
+ La marge entre chaque widget horizontalement
+ la taille du widget parent
----------------
Ajout d'un widget : (on passe en parametre un HWND, positionX, positionY, colspan, rowspan
// on calcul si le nombre max de col et de ligne n'a pas change
Si PositionX > MX
MX = PositionX
Si PositionY > MY
MY = PositionY
On declare une map de unsigned int pour les col et les lignes
// On a ainsi le nombre max de widget verticalement et horizontalement
On push dans VEC un nouvelle struct avec les parametre de cette fonction)
On parcours VEC
Si le composant a une taille minimal horizontalement
alors Map[index de la colonne] = cette taille minimale (on decremente egalement cette taille de la taille du widget parent)
Ou Si ... (De meme verticalement)
Sinon on incrémente le nombre de widget restant (ceux qui non pas de taille minimal et on divise la taille du widget parent restant par le nombre on a ainsi la taille de toute les colonne)
On parcourt le VEC pour créer les région et y mettre les widget
----------------
Ce code est plus ou moins fonctionnelle cependant ca ne tient pas en compte des colspan et rowspan ...
Si vous pouviez m'éclairer pour implémenter ceci ou si vous avez un meilleur algo en tête que celui que j'ai utilise,
N'hésitez pas.
Cordialement,
Toams
Partager