III. Le positionnement des objets▲
Un soucis majeur de notre fenêtre précédente est le
positionnement des objets dans notre fenêtre, ils se mettent simplement
les uns en dessous des autres. Le Fox Toolkit met à notre disposition les
concepts de conteneur vertical et conteneur horizontal.
Dans un conteneur vertical, les objets seront placés les uns en dessous
des autres tandis que dans un conteneur horizontal, ils seront placés les
uns à côté des autres.
III-A. Le conteneur vertical▲
int styleFrame = LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y;
int styleButton = FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y;
FXVerticalFrame *vf1 = new FXVerticalFrame(this,styleFrame,0,0,0,0,0,0,0,0);
FXButton *b1 = new FXButton( vf1, "b1" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b2 = new FXButton( vf1, "b2" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b3 = new FXButton( vf1, "b3" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b4 = new FXButton( vf1, "b4" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b5 = new FXButton( vf1, "b5" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);J'ai créé un conteneur vertical nommé vf1, contenu lui-même par this, ici, la fenêtre. Et tous les autres objets, b1, b2, b3, b4 et b5 sont contenus par vf1.

III-B. Le conteneur horizontal▲
int styleFrame = LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y;
int styleButton = FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y;
FXHorizontalFrame *hf1 = new FXHorizontalFrame(this,styleFrame,0,0,0,0,0,0,0,0);
FXButton *b1 = new FXButton( hf1, "b1" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b2 = new FXButton( hf1, "b2" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b3 = new FXButton( hf1, "b3" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b4 = new FXButton( hf1, "b4" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b5 = new FXButton( hf1, "b5" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);Le principe est le même que pour le conteneur vertical, tous les objets sont contenus par hf1, qui est un conteneur horizontal.

III-C. Là où ça devient vraiment intéressant▲
De par le modèle objet du Fox Toolkit, les conteneurs peuvent contenir des objets graphiques, mais ils sont eux aussi des objets graphiques. Un conteneur peut donc contenir .... des conteneurs. Démonstration :
int styleFrame = LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y;
int styleButton = FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT;
FXVerticalFrame *vf1 = new FXVerticalFrame(this,styleFrame,0,0,0,0,0,0,0,0);
FXButton *b1 = new FXButton( vf1, "b1" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXHorizontalFrame *hf1 = new FXHorizontalFrame(vf1,styleFrame,0,0,0,0,0,0,0,0);
FXButton *b2 = new FXButton( hf1, "b2" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b3 = new FXButton( hf1, "b3" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXHorizontalFrame *hf2 = new FXHorizontalFrame(vf1,styleFrame,0,0,0,0,0,0,0,0);
FXButton *b4 = new FXButton( hf2, "b4" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);
FXButton *b5 = new FXButton( hf2, "b5" ,NULL,NULL,0,styleButton,0,0,0,0,10,10,5,5);Je créé un conteneur vertical noté vf1 dans lequel j'insère
un bouton (b1) puis deux conteneurs horizontaux (hf1 et hf2) qui
contiennent les 4 autres boutons.
On remarquera que le premier
argument de chaque bouton et de chaque conteneur correspond à son propre
conteneur, vf1, hf1, hf2 ou bien this.



