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

mogwai93
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015
- 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
14
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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
14
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
14
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

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;