G_ICON et G_CICON


Si vous désirez utiliser des icônes monochrome dans vos ressources, c'est l'objet que vous devez utiliser. Il est cependant préférable d'utiliser des objets G_CICON qui permettent d'utiliser de la couleur.
L'ob_spec d'un G_ICON pointe vers la structure suivant :

typedef struct icon_block {
	void		*ib_pmask;	// Pointeur vers le masque de l'ic“ne
	void		*ib_pdata;	// Pointeur vers les datas de l'ic“ne
	char		*ib_ptext;	// Pointeur vers le texte
	char		*ib_char;	// Lettre (de lecteur) de l'ic“ne et couleur
	unsigned short	ib_xchar;	// position du caractŠre de l'ic“ne par...
	unsigned short	ib_ychar;	// ... rapport a l'origine de celui-ci
	unsigned short	ib_xicon;	// Position en X et Y...
	unsigned short	ib_yicon;	// ...de l'ic“ne par rapport … ob_x/ob_y
	unsigned short	ib_wicon;	// Largeur du plan de bit de l'ic“ne
	unsigned short	ib_hicon;	// Idem hauteur
	unsigned short	ib_xtext;	// Position en X et Y du texte de l'ic“ne...
	unsigned short	ib_ytext;	// ...par rapport … ob_x/ob_y
	unsigned short	ib_wtext;	// Largeur du texte
	unsigned short	ib_htext;	// Hauteur du texte
} icon_block;


Le champ "ib_pmask" est un pointeur vers le masque de l'icône (souvent en blanc) qui évite que le fond soit dessiné sur la zone où les bits sont positionné. "ib_pdata" est un pointeur vers le dessin proprement dit de l'icône monochrome, et ib_ptext permet d'ajouter du texte sous l'icône. Par exemple dans le cas d'un fichier, il est souhaitable d'y placer le nom de celui-ci.

Les icônes couleurs (G_CICON) sont des icônes monochrome auquel on ajoute un pointeur en fin de structure icon_block :

typedef struct cicon_data {
	icon_block	mono_block;		// Structure d'ic“ne monochrome
	cicon		*resolution_list;	// Pointeur sur la liste chaŚn‚ de r‚solution
}cicon_data;


"*resolution_list" est un pointeur vers une liste chaînée de plans de bits correspondant eux différentes résolution. Ces structures sont de la forme suivante :

typedef struct cicon {
	unsigned short	num_planes;	// Nombre de plan de la structure
	void		*color_data;	// Pointeur vers le dessin
	void		*color_mask;	// Pointeur vers le masque
	void		*selected_data;	// Pointeur vers le dessin (s‚lectionn‚)
	void		*selected_mask;	// Pointeur vers le masque (s‚lectionn‚)
	struct cicon	*next_rez;	// Pointeur vers la r‚solution suivante
} cicon_block;


Il n'est pas obligé d'avoir une partie sélectionné dans une icône. A ce moment là, "selected_data" contient "-1". Pour terminer la liste chaînée, next_rez contient un pointeur sur z‚ro (NULL).
Lors du chargement d'une ressource en mémoire depuis le disque, le système recherche l'icône de résolution égale ou immédiatement inférieure à celle de l'écran, puis applique une transformation pour passer le plan de bit au format de l'‚cran.

Retour à l'index G_BOUNDING et G_BOUNDED