Subclass de paint

Résolu
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 11 avril 2007 à 12:15
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 11 avril 2007 à 13:43
Bonjour à tous,
Je cherche à créer des contrôles utilisables dans un affichage en directX.
Je commence par le bouton.
Tout naturellement, j'ai créer une classe héritant de Button et je me suis dis que j'allais simplement faire "Overrides Sub OnPaint..." et que j'allais y mettre mon code pour peindre mon bouton en directX.
Le problème est qu'apparemment, lorsqu'un graphics est créé sur une zone de dessin (et c'est le cas puisque je suis dans la méthode OnPaint, j'ai un argument contenant un graphics sur mon bouton), il y bloque l'accès et directX me fais une exception lorsque je veux dessiner dessus.
Si je ne fais rien dans la méthode OnPaint, j'ai un rectangle noir qui s'affiche à la place du bouton au dessus du dessin directx alors réalisé dans la mainloop de mon programme.
Je me suis donc dis que j'allais intercepter le message avant qu'il ne crée le graphics. Je fais donc un overrides de WndProc de mon bouton et dans le cas du message WM_Paint (&HF) je lui dis de peindre avec directx.
Seulement dans ce dernier cas mon programme se bloque sur le DoEvents de ma boucle principale et appelle sans cesse le WndProc de mon bouton avec le message WM_Paint. J'imagine que y'a quelque chose que j'ai mal fait, que je devrais indiquer que je me suis occupé de dessiner, seulement je ne sais pas comment faire.
Pourriez-vous m'aider s'il-vous-plait ?

<hr size="2" width="100%" />Julien.

5 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
11 avril 2007 à 13:43
Haaa je l'ai trouvé !!!
Simplement l'API ValidateRect !
Merci quand même d'avoir pris le temps de me répondre !

<hr size="2" width="100%" />Julien.
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 avril 2007 à 13:04
Bonjour

Les boutons par défauts n'acceptent que les graphics, pour DirectX, à toi de tout faire à partir de .......  .....  Rien

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
11 avril 2007 à 13:25
Ouaip, mais justement j'aimerais bien ne pas avoir à repartir de rien, en fait il suffirait juste que je parvienne à renvoyer le bon message, à valider la région de mon contrôle...

<hr size="2" width="100%" />Julien.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 avril 2007 à 13:30
Bonjour

J'ai de gros doutes sur la possibilité de réalisation :
- La zone de dessin n'est pas un Graphics
- La sourie par Dx ou Windows ?
- Le clavier Idem

Il y a peut-être une solution, mais elle ne m'est pas encore apparue.

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
11 avril 2007 à 13:39
En fait j'ai deux niveau de contrôle pour le rendu
Soit dans le OnPaint :
Le problème est que le graphics est déjà créé et que je n'ai pas accès à la zone de dessin.

Soit dans le WndProc lorsqu'il recoit le message de windows demandant à être dessiné.
Là, il me suffit d'arrêter le message et donc d'empêcher la classe de base de créer le graphics et de se dessiner normalement. Le problème est que lorsque je fais cela, la région du contrôle reste invalidée et windows demande sans cesse (il reste bloqué sur le DoEvents) le dessin de cette région.
Il me faudrait donc un moyen de dire à windows que cette région est validée.
Je suis en train de regarder le framework avec Reflector pour voir comment le bouton transmet ce message dans le fonctionnement normal, mais c'est fort complexe, et les noms sont très peu explicites, c'est pas facile...

Pour ce qui est du clavier, ca ne pose pas de problème de le laisser tel quel, pour la souris je sais pas encore ce que je vais faire exactement.
C'est vrai que pour un bouton on voit peu l'utilité d'hériter du bouton de base, mais quand on voit un peu tout les contrôles, ca devient intéressant...
(C'est *** de faire un combobox à la main... ou une textbox d'ailleurs...)

<hr size="2" width="100%" />Julien.
0
Rejoignez-nous