[WIN32]RÉCUPÉRER LA COULEUR D'UN PIXEL À L'ÉCRAN

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 13 nov. 2007 à 19:01
 whatever - 25 mai 2017 à 21:41
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/44700-win32-recuperer-la-couleur-d-un-pixel-a-l-ecran

Il faut sérieusement 145 lignes pour faire un OS.getpixel(x,y)? Non je ne crois pas.
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 nov. 2007 à 10:06
Hop, MAJ. Bah encore merci d'avoir vérifier : je vous donne du boulot dites-donc ! Pour la peine, j'ai mis les variables de la callback en static.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
20 nov. 2007 à 13:15
WNDCLASS et WNDCLASSEX sont des structures et non pas des classes comme j'ai dit plus haut sans faire attention.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
20 nov. 2007 à 01:37
ATTENTION:
Le style CS_OWNDC ne doit pas être utilisé avec CreateWindow(). Il doit être plutôt affecté au membre style de la classe WNDCLASS ou WNDCLASSEX. Il s'agit d'un style de classe de fenêtre et non pas un style de fenêtre.

Une variable locale déclarée en static est allouée dans la mémoire globale de l'exécutable, donc accessible à tout moment. Une fonction CALLBACK appelée de manière répétitive doit limiter l'usage de la pile pour gagner un peu en vitesse. Dans ton code, cela ne poserait aucun problème.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 nov. 2007 à 10:18
Il le faut, ça libère au moins une place dans la table des handle.
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 nov. 2007 à 10:03
Bah je suis pas arriver à savoir s'il fallait un ReleaseDC. Je voulais faire un truc dans ce genre là :

GetWindowLong(?, GWL_STYLE) & CS_OWNDC

Mais je vois pas quoi mettre comme Handle de fenêtre (0 marche pas, et je sais pas si GetDesktopWindow est le bon) :

Donc autant en utiliser un dans le doute : la doc à l'air de dire que faire un ReleaseDC sur un DC privé ne pause pas de problème.

En plus, le ReleaseDC renvoie 1, indiquant que la fonction s'est bien passée.
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
14 nov. 2007 à 11:11
Merci pour ces remarques !

MOGWAI93 -> _hWnd est utilisée un peu de partout (Dans le SetTimer).
OK pour les types pas assez rigoureux.

BruNews -> Bon bon, je vire le bloc. Pour le ReleaseDC, ça dépend si le DC est common, class ou private... Je vais fouiller un peu la question.

RACPP -> 1, 2 OK. Pour le 3, j'ai un peu plus de mal. Cette fonction peut plus ou moins s'appeler récursivement (Avec le SendMessage par exemple...) Donc si c'est statique, il peut y avoir des effets de bords pas cools.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
14 nov. 2007 à 00:55
Salut,
L'idée de source est bonne mais il parait que tu n'as pas pris le temps de la finaliser. En plus de ce qui a été dit voici quelques remarques:
1- Le message WM_ERASEBKGND fournit le HDC de la fenêtre dans wParam donc aucun besoin d'utiliser GetDC(). Cette fonction est même appelée inutilement trois fois de suite dans ton code.
2- La fonction OnCreate() est vide.
3- Il est préférable de déclarer les variables locales de WindowProcedure en static. Cela évitera l'usage de la pile à chaque appel de la procédure.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 nov. 2007 à 21:45
ça c'est tout à fait certain.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 nov. 2007 à 21:29
De l'assembler en plein milieu d'une fonction... ça n'empêcherait pas son optimisation ça ?

(C'est toi, brunews, qui m'avais fais la remarque je crois)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 nov. 2007 à 19:17
Jolie source.

Le bloc 'bon ordre' est aussi inutile que zoli, il faut dans tous les cas 2 shifts ensuite.
Me semble qu'il faut ReleaseDC pour GetDC(0).
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
13 nov. 2007 à 19:01
pourquoi créer une deuxieme variable "_hWnd" ?
alors que _hWnd est égale à hWnd

et pour information, DevCpp (mingW) n'est pas "content" des 2 variables :
HANDLE hDC;
HANDLE _hThisInstance;

il préfère :
HDC hDC;
HINSTANCE _ThisInstance;
Rejoignez-nous