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

Soyez le premier à donner votre avis sur cette source.

Vue 3 392 fois - Téléchargée 277 fois


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

Ajouter un commentaire

Commentaires

pakofils_
Messages postés
2
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
19 avril 2009
-
Hi!
ce qui est bizarre avec toi, c'est que tu descends franchement pas mal de sources lorsque ces dernieres sont moyennes etc etc alors pourquoi le fais tu en postant celle ci? pour que qq'un teste uniquement? inutile.. puisque pas finie
j'avoue ne pas te comprendre, d'ailleurs pour quoi faire, hormis denigrer tu ne fais rien d'autre, et ça se confirme par le si peu de sources que tu postes ici ^^
note: je n'en met pas, inutile ^^
uaip
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Salut,
Alors, pour répondre (en toute sincérité). Avant de dire qu'elle n'est pas finie... l'as-tu testée ? Tu crois que le screen est une invention ? La dll marche très bien, pour une version beta. Quand je dis qu'elle n'est pas finie, c'est que j'ai plein d'idée de rajout à y faire. C'est pour ça que par convention, chaque programme a un numéro de version :) . A la différence des autres sources que l'on voit ici, moi je ne code pas pour moi. Je m'explique. Quand quelqu'un poste une source ici, en général elle est tirée de son script, du moins il s'en sert (ou il est succeptible de s'en servir).
Moi je ne fais pas de mIRC scripting, je fais cette DLL pour les scripteurs qui en auraient besoin. Et je trouverais ça bête pour moi de passer 4 mois à coder une DLL dont personne ne se servirait. Donc je code une version beta, je distribue, si elle plait tant mieux, et je la continue, sinon je laisse tomber.

Ensuite oui, je dénigre les codes que je trouve mauvais, mais j'explique pourquoi je les trouve mauvais. Personne ne t'empèche de critiquer ma source (si tu connais le C/C++) et de m'indiquer d'éventuelles optimisations, je suis ouvert à tout.

Je ne prends pas mal ton commentaire car je ne le considère pas comme insultant.

Quant au "si peu de source", je ne te permets pas de juger ^^. A mon actif, je dois avoir bien plus d'une centaine de sources, en tout genre (mIRC, tcl, Perl, php, html, SQL, C/C++, javascript, bash/sh, batch, etc etc) et si tu en voir, pas de soucis je te file mon portfolio en mp.

Bonne continuation.
ZeroOo
Messages postés
24
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
21 avril 2009
-
Disons que pour moi les fonctions de la DLL ne sont pas forcément très utiles quoique cela puisse un petit côté personnalisé aux dialogues et que je n'ai sûrement pas pensé à tous les côtés pratiques (tu aurais pu nous fournir un exemple).

Par contre fournir le code source serait, à mon avis, très utile pour tous ceux qui souhaitent développer un peu le côté DLL en mIRC.

Le commentaire de Pakofils_ me semble un peu mal venu.
uaip
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Salut,
Il y non seulement un exemple, mais aussi le code source.
Concernant le développement de la DLL, on m'a déjà demandé quelques améliorations : j'ai déjà corrigé de nombreux beugs (dans cette version ci-présente, quand on mets une fenêtre par dessus le dialog et qu'on réaffiche le dialog, les dessins disparaissent, idem si on déplace le dialog hors de l'écran). J'ai corrigé tout ça.
J'ai également modifié la façon de rafraichir la fenêtre : l'utilisateur peut la rafraichir quand il le souhaite.
J'ai également ajouté un gestionnaire de sous-classement : l'utilisateur peut intercepter les événements move, paint, active, etc (qui complètent les événements de bases comme mouse, sclick, init, etc)
Je suis aussi en train de modifir pour pouvoir utiliser la DLL sur plusieurs dialog.
Bref, tout ça pour dire que je file le code source (dans le zip), tu peux le modifier à ton gré, mais si tu redistribues la DLL, j'aimerais bien être tenu au courant, par question de respect.
Tchoupi :)
dj328i
Messages postés
311
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
1 mai 2009
-
Bon , écoute l'idée de départ n'est pas mauvaise. Mais l'utilité n'est pas la. Seul le code-sources de la DLL a mon avis peut-etre utile pour ceux qui veulent parfaire leurs connaissances. C'est très bien de ce coté. Moi je le vois plus comme un tutorial que comme une source.

Ex si je prendrais ton DLL pour remplacé mes .wav dans mon projet actuel , le but serait de sauvé sur la taille des fichiers. Mais la taille du dll elle même serait plus grosse , que quesque je pourrais sauvé. Alors de mon coté pour moi c'est inutiles. peut-être pour qqn d'autre qui sais.

Ne te laisse pas abbatre , continue a travaillé et a apprendre.

Le fait de pouvoir dessiné dans un dialog , peut-être réalisé sans dll tu sais ? Il suffit de crée un @ sans bordure et de crée un alias qui attache un Window a un dialog sur une position précise selon la position de ce dernier dans l'écran.

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.