CLABEL : UN CSTATIC AMÉLIORÉ

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 13 juil. 2004 à 13:47
cs_Urgo Messages postés 780 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 avril 2009 - 16 juil. 2004 à 14:03
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/24447-clabel-un-cstatic-ameliore

cs_Urgo Messages postés 780 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 avril 2009 1
16 juil. 2004 à 14:03
Je suis d'accord avec toi sur les goto..
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
15 juil. 2004 à 15:17
Pour les goto, je sais qu'il est coutume de dire qu'il faut s'en passer mais c'est unisuement conventionnel...
Je m'explique:
1) Que fait le compilateur au final ? Des JMP ! C'est-à-dire des goto
2) Il me semble que le code que j'ai fourni ici est plus lisible que des if imbriqués

En fait de manière générale je suis pour éviter les goto à moins qu'on y gagne en lisibilité (et ça arrive plus souvent qu'on ne le crois)


Pour SetMail, c'est-une bonne idée. J'essaierai de l'intégrer ce WE. J'y ajouterai peut-être quelques paramètres supplémentaires (par exemple subject).


Merci pour ces commentaires
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 juil. 2004 à 12:12
un petit add-on, pour les mails...

void CLabel::SetMail(const CString strMail, const BOOL bUseIEStyle)
{
/// -----------------------------------------------------------------------------------------------
/// ---------------- CLabel::SetMail(const CString strUrl ,const BOOL bUseIEStyle) ----------------
/// -----------------------------------------------------------------------------------------------
/// ----- Objectif : init un lien vers une adresse EMail
/// ----- Auteur(s) : Bruno Celle 15/07/04
/// ----- PreCond : strMail de type 'a@a.a'
/// ----- PostCond : /
/// ----- Etat : 1 (-1<0<1<2)
/// -----------------------------------------------------------------------------------------------
/// ----- const CString strMail : mail
/// ----- const BOOL bUseIEStyle(par défaut : 'FALSE') : cf UseIELinkStyle()
/// -----------------------------------------------------------------------------------------------
/// ----- Var Utilisées de la classe (1) : m_strUrl
/// ----- Var Muettes (cf.partie préc) (2) : bUseIEStyle ,strUrl
/// ----- Var In (2) : bUseIEStyle ,strUrl
/// ----- Var In Globales Constantes (1) : SS_NOTIFY
/// ----- Var Out (1) : m_strUrl

if(strMail =="")
{
RemoveUrl();
return;
}
CString strURL="mailto:";
strURL+=strMail;
SetUrl(strURL,bUseIEStyle);
return;
}
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 juil. 2004 à 10:33
conseil de prog:
évite les goto... (surtout si il y en a un seul)

OnClicked() modifié & commenté devient :


void CLabel::OnClicked()
{
/// -----------------------------------------------------
/// ---------------- CLabel::OnClicked() ----------------
/// -----------------------------------------------------
/// ----- Objectif : clic de l'utilisateur
/// ----- Auteur(s) : Grégory Allouche 10/07/04
/// ----- PreCond : /
/// ----- PostCond : /
/// ----- Etat : 1 (-1<0<1<2)
/// ----- MaJ 14/07/04 : suppression du goto & commentaires formalisés
/// -----------------------------------------------------
/// ----- Var Utilisées de la classe (1) : m_strUrl
/// ----- Var Internes à la fonction (3) : ShellExecute ,err ,hKey
/// ----- Var Utilisées par adresse (2) : buff ,valName
/// ----- Var In (1) : m_strUrl
/// ----- Var In Globales (1) : err
/// ----- Var In Globales Constantes (3) : ERROR_SUCCESS ,HKEY_CLASSES_ROOT ,SW_NORMAL

///algo : SI une URL est spécifiée
if(m_strUrl.GetLength())
{
///algo : Recherche du navigateur par défaut
HKEY hKey;
///algo : SI on arrive à lire la base de registres,
if( RegOpenKey(HKEY_CLASSES_ROOT,"http\\shell\\open\\command", &hKey) == ERROR_SUCCESS)
{
DWORD size=512;
unsigned char buff[512];
char valName[512];
DWORD type;
if( RegEnumValue(hKey, 0, valName, &size, NULL, &type, buff, &size) == ERROR_SUCCESS )
{
CString strCommandLine=buff;
CString strExe;
CString strArgs;
strCommandLine.TrimLeft();
strCommandLine.TrimRight();
///algo : separe l'EXE des paramètres
if(strCommandLine.Left(1) ==""")
{
int nPos=strCommandLine.Find('"', 1);
strExe=strCommandLine.Mid(1, nPos - 1);
strArgs=strCommandLine.Mid(nPos+1);
strArgs.TrimLeft();
}
else
{
strCommandLine+=" ";
int nPos=strCommandLine.Find(' ');
strExe=strCommandLine.Left(nPos);
strArgs=strCommandLine.Mid(nPos+1);
}
///algo : SI %1 est utilisé
if(strArgs.Find("%1") != -1)
///algo : le remplace par l'url
strArgs.Replace("%1", m_strUrl);
else ///algo : SINON
///algo : ajoute l'url aux paramètres existants
strArgs+=" ""+m_strUrl+""";
///algo : lance le navigateur par défaut
ShellExecute(NULL,"open", strExe, strArgs, NULL, SW_NORMAL);
}
}
else///algo : SINON
///algo : utilise ShellExecute en desespoir de cause
ShellExecute(NULL,"open", m_strUrl,"", NULL, SW_NORMAL);

}
return;
}
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 juil. 2004 à 13:47
très bien,
en 3 clics et un peu de code on arrive au résultat escompté, sans se pencher sur ton code

Bonne bibli!

Magicalement
Magic Nono: [red]l'informagicien!/red
Rejoignez-nous