cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 16 juil. 2004 à 14:03
Je suis d'accord avec toi sur les goto..
garslouche
Messages postés583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 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és1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 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
16 juil. 2004 à 14:03
15 juil. 2004 à 15:17
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
15 juil. 2004 à 12:12
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;
}
15 juil. 2004 à 10:33
é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;
}
13 juil. 2004 à 13:47
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