CONVERTISSEUR RGB ->COLORREF

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 févr. 2009 à 17:07
victorcoasne Messages postés 1100 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 octobre 2012 - 2 mars 2009 à 13:54
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/49309-convertisseur-rgb-colorref

victorcoasne Messages postés 1100 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 octobre 2012 7
2 mars 2009 à 13:54
Désolé pour le double post mais je montre comment on corrige et on allège le code :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
try
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
//on lève une exception si une instance du programme existait déjà
throw hMutex;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
catch(HANDLE&hMutex)
{
MessageBox(0," convert est déjà en cours d'exécution. ","convert",0);
if (hMutex)
CloseHandle(hMutex);
return FALSE;
}
}

se change en :

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
hMutex = CreateMutex(NULL, FALSE,"convert");
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
CloseHandle(hMutex);
MessageBox(NULL, "Convert est déjà en cours d'exécution !", "Convert", 16);
return FALSE;
}
//si aucune anomalie n'est survenue(si le programme n'était pas encore lancé),
//on lance le programme.
hinst=hInstance;
DialogBox(hinst,"DIALOG1",NULL,(DLGPROC)DlgProc);
return 0;
}
victorcoasne Messages postés 1100 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 octobre 2012 7
2 mars 2009 à 13:48
Personnellement depuis le temps que je programme à aujourd'hui je ne me suis jamais servis des exceptions.
Les codes d'erreur ou des classes de gestion d'erreur intégrées (la fonction va renvoyer return Erreur("Nom de l'erreur") et c'est cette fonction renvoi false, le programmeur peut décider d'appeller la fonction ou non qui renvoi l'erreur) quand la fonction renvoi false suffit.
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
20 févr. 2009 à 17:07
Titre de la source erroné:
RGB = COLORREF et vice versa, il n'y a donc rien à convertir, c'est un DWORD et rien de plus.

La gestion des exceptions C++ (throw, etc.) dans un prog Win API est totalement inutile et donc nuisible aux perfs. L'API indique toujours le statut de réussite, un simple test sur le statut se fait en quelques cycles.