WinBox - Documentation 1.2

Liste des Widgets > Panel

Plus complexe d'utilisation, affiche ce que vous lui spécifiez.
H-Expansif: Oui
V-Expansif: Oui
panel1 panel2
Eh oui, un panel permet de faire ce genre de choses. Impressionnant non?

Création

Widget *wPanel(BOOL displayBounds);

Méthodes

void wPanel_Connect(Widget *panel, void (*drawFunc) (Widget *));
SDL_Rect wPanel_GetArea(Widget *panel);

A propos

Un Panel est une zone rectangulaire dans laquelle vous spécifiez ce que vous souhaitez affichez, et ce à l'aide d'une fonction que vous connectez à l'aide de la méthode wPanel_Connect. A chaque fois que Winbox aura besoin de dessiner le Panel il fera appel à cette fonction, et enverra en argument le panel concerné. Cela permet d'associer la même fonction à plusieurs panels, ce qui peut simplifier le code.

La méthode wPanel_GetArea permet de dessiner facilement au sein du Panel. Elle renvoie la zone dessinable du widget, et prends en compte si les bordures sont affichées ou non.

Un panel est un widget statique. Si vous aimeriez avoir un widget dynamique particulier différent de tous ceux par défaut dans Winbox, le mieux est de créer son propre widget. C'est une méthode qui permet de tout faire, mais bien plus complexe.

Exemple

L'exemple ci-dessous affiche l'image 2 :
#include "os.h"
#include "SDL\SDL.h"
#include "Winbox\Winbox.h"
#include "Winbox\AllWidgets.h"


int main(void)
{

SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *scr = SDL_SetVideoMode(320, 240, is_cx? 16:8, SDL_SWSURFACE);
SDL_FillRect(scr, NULL, SDL_MapRGB(scr->format, 86, 200, 90));

// Déclaration des variables


// Déclaration des Widgets
Widget *wid = wBasicLayout(1);
Widget *pan = wPanel(1);
wSetWidth(wid, 240);
wSetWidth(pan, 150);
wSetHeight(pan, 140);


// Déclaration des fonctions callbacks
void panel_draw(Widget *panel)
{
  int x = 0;
  SDL_Rect area = wPanel_GetArea(panel);
 
  // on dessine le fond blanc
  DrawFillRect(scr, &area, RGB(255,255,255));
 
  // on dessine les lignes rouges
  while (x+5 < area.w) {
   x += 5;
   DrawFillRectXY(scr, x + area.x, area.y, 1, area.h, RGB(255,0,0));
  }
}


// Connections
wPanel_Connect(pan, panel_draw);


// Déclaration du construct
wCONSTRUCT *ctr = wNewConstruct(wid);
wAddWidget(wid, pan);


// Activation
wActivateConstruct(ctr);

// on quitte
SDL_Quit();
return 1;
}