[dll] dessiner comme les picwins sur une dialogbox (bonus: jouer des sons midi)


Description

Bonjour à tous :)

Je ne savais pas quoi faire hier, alors j'ai codé cette DLL. Elle n'en est qu'à la première version, assez foireuse ^^, mais personne n'a voulu la tester, alors je la poste pour avoir quelques avis/critiques avant d'aller un peu plus loin.
Pour le moment, elle permet de :
- dessiner sur une dialogbox, (rectangles, cercles, points, lignes, rectangles remplis) et d'écrire du texte
- modifier la couleur de fond d'un dialog
- associer le device de peinture à un double buffer (très pratique pour les dessins dynamiques (cf l'animation en exemple))
- bonus : jouer des sons MIDI en envoyant directement des instructions à la carte son du PC, via les APIs Windows
Testé sous Windows XP sp3.

Voir le screen pour se faire une idée (je vous conseille de télécharger et tester les 3 mélodies proposées en guise d'exemple :p).
Le fichier .mrc du screen est également disponible, à titre d'exemple.

!!! Attention attention !!!
La syntaxe des instructions envoyées à la dll n'est pas franchement optimisée, loin de là. Faites attention à vos commandes. Il devrait y avoir plus de sécurité la prochaine fois, mais je ne voulais pas faire ce boulot pour rien (si personne n'est intéressé).

Lire le fichier aide.txt pour obtenir les syntaxes des commandes possibles et les avertissements utiles.

N'hésitez pas à poser vos questions, j'avoue poster ça un peu "à l'arrache", je serai ouvert.lement disponible, à titre d'exemple.

Source / Exemple :


//Euh... c'est du code C/C++ donc ça sert à rien de poster tout le code...
//Allez, pour le fun, voici l'instruction pour écrire du texte

//Ecriture d'un texte
//Syntaxe: <RGB_text> <RGB_back> <taille> <x> <y> <"font"> <"text">
fct(Text) {
	//Programme
	char** spectok=split(data,"\"",0);
	char** tok=split(spectok[0]," ",0);
	int nbr_tok,nbr_spectok;
	for(nbr_spectok=0;spectok[nbr_spectok] != NULL;nbr_spectok++) {}
	for(nbr_tok=0;tok[nbr_tok] != NULL;nbr_tok++) {}
	//Gestion d'erreurs
	if ((nbr_tok != 5) || (nbr_spectok != 4)) { strcpy(data,"Circle: parameters: <RGB_text> <RGB_back> <size> <x> <y> <\"font\"> <\"text\">"); FreeTok(tok,nbr_tok); FreeTok(spectok,nbr_spectok); return 3; }
	//Récupération des paramètres
	int cc[]={atoi(tok[3]),atoi(tok[4]),0,0};
	//Ajout de l'instruction dans la liste
	ostringstream oss;
	oss << tok[1] << "$" << spectok[1] << "$" << spectok[3];
	string buff=oss.str();
	CInstructions instr(TEXT,(int*)cc,(COLORREF)atoi(tok[0]),(char)atoi(tok[2]),buff);
	I.push_back(instr);
	//Libération des ressources
	FreeTok(tok,nbr_tok);
	FreeTok(spectok,nbr_spectok);
	//Valeur de retour
	InvalidateRect(hwnd,NULL,FALSE);
	strcpy(data,"Circle: ok");
	return 3;
}

Conclusion :


Propriétés de la dll:
codée sous Visual Studio 2005, API Windows
testée sous XP sp3
codée en C/C++

Codes Sources

A voir également

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.