UTILISER L'IP CONTROLE

wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 1 janv. 2007 à 22:25
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 2 janv. 2007 à 17:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40936-utiliser-l-ip-controle

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 janv. 2007 à 17:50
bnultoa partout dans mes sources, comme ultoa() en moins idiot nettement plus rapide, retourne pointeur sur fin d'écriture.
http://www.cppfrance.com/code.aspx?ID=36937
dans bnIntA.h et c.

char buf[40], *c;
c = bnultoa(127, buf);
*c++ = '-';
bnultoa(25, c);
etc...
buf contient "127-25" sans strcat ni aucun reparcours stérile de la chaine.
decize Messages postés 4 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 2 janvier 2007
2 janv. 2007 à 17:29
"Personne ne demande de comprendre bnultoa() comme on ne demande à personne de savoir l'implem de sprintf(), suffit de l'employer.
Par contre on peut au moins coder ce mini algo de formatage qui justifie la source, sinon quel intérêt."

Ca me pause un probleme, j'ai du mal à utiliser une fonction que je ne comprend pas.
Bien sur on a "man" ou tout autre recherche pour trouver le prototype et l'application de la fonction.
Mais de la à utiliser la fonction sans la comprendre ?
Je suis sur qu'avec une petite ligne de commentaire dans le code ce serait nikel ;).
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
2 janv. 2007 à 15:43
merci je vais corriger tout sa dans la soiree.
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
2 janv. 2007 à 11:49
Et encore une dernière pour la route!
Dans le traitement du IDCANCEL:
Pourquoi un PostQuitMessage? J'aurais utilisé un DestroyWindow et dans le message WM_DESTROY, j'aurais fait à ce moment la un PostQuitMessage.

Un passage de MSDN pour DestroyWindow:
"The function first destroys child or owned windows, and then it destroys the parent or owner window."

Voila, je crois que cette fois-ci ce sera tout. :D
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
2 janv. 2007 à 11:44
Ah si une autre remarque!
Tu codes en quoi? C ou C++?

Parcque le new pour créer le buffer ca ressemble (et ca fait meme plus que ressembler) à du c++ alors que le reste de ton code est en C (sauf le placement de la variable MSG en plein milieu du code).

Qui plus est, on a bien un new, mais pas de delete! Attention, c'est comme un malloc sans free (en C)!
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
2 janv. 2007 à 11:39
J'avais juste une petite remarque quand au décalage de bits pour récupérer les différentes valeurs des champs, ne pourrais-tu pas utiliser une union pour ca?

typedef union u_ipfield
{
struct
{
BYTE ip0;
BYTE ip1;
BYTE ip2;
BYTE ip3;
} desc;
DWORD val;
} IPFIELD;

Comme ca pour récupérer la valeur du controle:
IPFIELD monIp;
SendDlgItemMessage(Dlg,IDC_IP,IPM_GETADDRESS, 0 ,(LPARAM) &(monIp.val));
et ensuite pour travailler sur les différents champs de ton ip:
monIp.desc.ip0 ou monIp.desc.ip1 etc...

Meme si tu n'utilises pas d'union, qu'est ce qui justifie l'utilisation de toutes ces variables globales? Normalement il n'y en a besoin d'aucune dans ton code.
Pas besoin de Dlg, tu ne t'en sers que dans ta winmain, alors mets cette variable dans le winmain!
Pour les autres, tu ne t'en sers que dans ta boucle de message, mets les uniquement dans ta boucle de message.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2007 à 23:41
J'ai vérifié, le compilo avait corrigé mon truc à la va vite mais comme ce n'est pas une raison je remets la forme correcte:void __stdcall bnIpFormatStr(DWORD dwip, char *psz)
{
DWORD n;
n = dwip >> 24;
if(n < 100) {
*psz++ = '0';
if(n < 10) *psz++ = '0';
}
psz = bnultoa(n, psz);
*psz++ = '.';
n = (dwip >> 16) & 0xFF;
if(n < 100) {
*psz++ = '0';
if(n < 10) *psz++ = '0';
}
psz = bnultoa(n, psz);
*psz++ = '.';
n = (dwip >> 8) & 0xFF;
if(n < 100) {
*psz++ = '0';
if(n < 10) *psz++ = '0';
}
psz = bnultoa(n, psz);
*psz++ = '.';
dwip &= 0xFF;
if(dwip < 100) {
*psz++ = '0';
if(dwip < 10) *psz++ = '0';
}
bnultoa(dwip, psz);
}

bien sur ne tester <10 QUE si est <100.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2007 à 23:36
Personne ne demande de comprendre bnultoa() comme on ne demande à personne de savoir l'implem de sprintf(), suffit de l'employer.
Par contre on peut au moins coder ce mini algo de formatage qui justifie la source, sinon quel intérêt.
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
1 janv. 2007 à 23:30
je vais rajouter sa. mais ne pense tu pas que cela aura une approche un peu difficile pour les debutants ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2007 à 23:13
oh le vilain sprintf...

void __stdcall bnIpFormatStr(DWORD dwip, char *psz)
{
DWORD n;
n = dwip >> 24;
if(n < 100) *psz++ = '0';
if(n < 10) *psz++ = '0';
psz = bnultoa(n, psz);
*psz++ = '.';
n = (dwip >> 16) & 0xFF;
if(n < 100) *psz++ = '0';
if(n < 10) *psz++ = '0';
psz = bnultoa(n, psz);
*psz++ = '.';
n = (dwip >> 8) & 0xFF;
if(n < 100) *psz++ = '0';
if(n < 10) *psz++ = '0';
psz = bnultoa(n, psz);
*psz++ = '.';
dwip &= 0xFF;
if(dwip < 100) *psz++ = '0';
if(dwip < 10) *psz++ = '0';
bnultoa(dwip, psz);
}
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
1 janv. 2007 à 22:25
Merci de laisser vos commentaires,
j'ai oublier de preciser que de plus ce code posseder le style XP
Rejoignez-nous