Voila, je poste ma librairie de fonction de dessin d'interface utilisateur en mode console parce que je n'ai pas encore vu de code comme celui la sur cppfrance, qu'elle est relativement aboutie, et qu'elle peut permettre à certains de coder des applications console avec une belle interface, en utilisant un API relativement léger =).
Bon, les fonctions, c'est du vu et du déjà vu, mais je poste quand même parce que le code à quelques intérêts notables, en plus de son utilité pratique.
Pour les détails sur l'utilisation des fonctions, je vous invite a regarder le code source, ou bien le fichier d'aide au format html fourni dans le ZIP (aide vraiment détaillé).
Parmi ces intérets, citons notamment un exemple d'utilisation des fonction à nombre d'arguments variables, via les va_list. Je me suis servi du code de printf, trouvé dans un stdio.c sur le net, pour pouvoir écrire ma fonction (il s'agit de xprintf, et de xrprintf).
Voila c'est tout ce que j'avais à dire sur ce code. A+ et bonne lecture.
PS : Le ZIP contient la solution Visual Studio 2008, qui contient elle même 2 solutions :
- LibGraphC : la librairie à proprement parler, il s'agit d'un projet de type Win32 Static Library générant un fichier libgraphc.lib.
- LibGraphCTest : un projet console de test de la librairie, il est linké avec la librairie, et comporte une copie du header graphc.h
Pour recompiler ce code via un autre compilateur, il faudra créer un projet static library (je pense notamment à dev-cpp, code::blocks ...) comportant les fichiers graphc.h, graphc.c, et drawc.c, compiler, et linker le binaire résultant avec un projet de test.
voila =)
Source / Exemple :
// je poste ici uniquement le code source de xprintf
// qui reprend le code de printf, parce que le concept
// est intéréssant et parce que j'ai eu du mal à le trouver
// sur le net.
int xprintf(USHORT x, USHORT y, const char* format, ...)
{
// déclaration des variables
va_list args;
int n;
// on positionne le curseur en x,y
setxy(x, y);
// on initialise la liste d'argument
va_start (args, format);
// on imprime la chaine
n = vprintf (format, args);
// on ferme la liste d'arguments
va_end (args);
// et on retourne n
return n;
}
// Et ici, je poste le code que j'ai tapé dans ma fonction main
// qui m'a permis d'obtenir l'interface vue sur le screen shot
void draw_ui()
{
// on remplit tout en bleu et on écrit en jaune
fill(DBLUE, YELLOW);
// on dessine un premier rectangle FAT
rect(0, 0, 40, 25, FAT, false);
// on crée une "banniere"
hline(0,4,40, FAT);
// on rajoute les caracteres d'angles
xprint(0 , 4, (char)CROSS_LEFT_FAT);
xprint(39, 4, (char)CROSS_RIGHT_FAT);
// on écrit le titre
setcolor(GREEN, DBLUE);
xprintf(15, 2, "Titre FAT");
// on écrit cette fois en cyan sur noir
setcolor(CYAN, DBLUE);
/// on dessine un deuxieme rectangle slim
rect(40, 0, 39, 25, SLIM, false);
// on crée un banniere
hline(40, 4, 39, SLIM);
// on rajoute les caracteres d'angles
xprint(40, 4, (char)CROSS_LEFT_SLIM);
xprint(78, 4, (char)CROSS_RIGHT_SLIM);
// on écrit le titre
setcolor(GREEN, DBLUE);
xprintf(55, 2, "Titre SLIM %d", 2);
}
Conclusion :
Une librairie que je trouve utile, qui donne des beau résultats, facile à utiliser.
Je suis ouvert à toutes critiques qui pourrait me permettre d'améliorer/optimiser ce code.
N'hésitez pas à regarder le fichier d'aide html, il est tout beau :D et il est très détaillé.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.