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.