cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
14 sept. 2004 à 22:18
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
17 sept. 2004 à 20:27
Bonsoir,
Voila, je voux explik mon pb : je veux dessiner, 'sur' les controles d'une fenetre, un rectangle, mais j'ai un ptit souci sur comment dessiner en sachant qu'avec les 3 methodes suivantes, j'ai des soucis :
-Recup le HDC du controle lui mm, et dessiner sur celui-ci (bof, ca c nul, et ca marche po tres bien)
-Recup le HDC de l'ecran (GetDC(NULL)) et dessiner 'sur' le controle (fonctionne mais n'efface pas les traits précedemment dessiné, comment faire ?)
-Creer une fenetre en forme de rectangle et la superposer au controle (n'apparait pas tt le temps, mm en HWND_TOPMOST...)
Si quelqu'un pouvait me guider dans le choix d'une de ces 3methodes, jle remercie..
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 14 sept. 2004 à 22:35
Ah pardon, j'ai pas tres bien posé ma kestion : je veux dessiner sur le controle de n'importe kel fenetre, en fait, on se fout de la fenetre (parente) puis ce ke je recup directement le handle du controle a partir de WindowFromPoint.
J'ai aussi oublié de dire que si "mes" methodes ne sont pas bonnes, n'hesitez pas a men donner d'autres..
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 14 sept. 2004 à 23:22
Salut,
Mouais... si c'est pour dessiner sur des fenetres qui ne sont pas dans ton processus le sous-classement est pas adapté.
Sinon pour la methode avec GetDC(null):
tu dis que les traits précedemment dessiné ne sont pas effacés, peut etre que tu peux forcer le controle a se redessiner pour effacer les traits ? (UpdateWindow).
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 sept. 2004 à 13:25
Dessiner sur le DC de l'écran, ca semble pas très raisonnable...
Fais un sous-classement du controle. Dans WM_PAINT de la WndProc, appelle d'abord CallWindowProc avec Proc par défaut pour le dessiner normalement, puis dessine ce que tu veux.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 17 sept. 2004 à 15:50
Salut,
Le probleme c'est que le hwnd de la fenetre est récupéré directement avec WindowFromPoint, ca peut donc etre une fenetre d'un autre processus, auquel cas le sous classement ne pourra pas etre fait 'simplement'.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 sept. 2004 à 15:58
Ah oui j'avais lu que le premier message. Dans ce cas je vois exactement ce que AlexMAN veut faire, et il faut bien utiliser le GetDC(0).
AlexMAN> Je te montre ca ce soir si tu veux
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 17 sept. 2004 à 19:37
Ok chef pas de pb (dsl de pas t'avoir rpd au mp, jfais ca de suite).
aardman > Si tu te sens de m'expliker comment on fait le sous classement d'un controle par son hwnd (ou un lien ou autre), je veux bien m'y atteler, paske avec ce genre de truc, c vraiment la porte ouverte a tte les fenetres...
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 17 sept. 2004 à 19:38
ou vecchio, j'y pense, si tu peux m'eclairer sur la marche a suivre, et pas tt me donner comme ca, ce serait sympa, paske jmré bien le faire tt seul moi... merci !
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 17 sept. 2004 à 20:07
Salut,
En gros ca consiste a remplacer la wndproc par defaut du controle par une wndproc a toi. Pour cela il suffit de changer l'addresse de la wndproc de la fenetre avec SetWindowLong et d'ecrire une callback spécialement pour cette fenetre. Il faut aussi penser a appeler CallWindowProc a la fin de ta wndproc pour que le message soit traité par la wndproc par defaut (sauf si tu veux volontairement bloquer le message).
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 17 sept. 2004 à 20:11
ok tu m'explik le sous classement, ca ya pas de pb, mais tu dis plus haut kon peut sous classer un controle d'un autre process, mais comment ? j'ai une ptite idée, mais la c vraiment pas simple !
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 17 sept. 2004 à 20:27
Salut,
Au contraire j'ai dis qu'on pouvait pas sous classer une fenetre d'un autre processus.
Le pointeur vers ta wndproc est valide dans ton processus, mais pas dans les autres...
Pour que ca marche il faudrait que le pointeur vers ta wndproc soit valide dans le contexte du procesus qui a créé la fenetre, et je pense qu'on pourrait faire ca en metant la wndproc dans une dll et en chargeant la dll dans le processus (mais ca fait quand meme compliqué juste pour dessiner un truc ...).