Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 2009
-
11 avril 2007 à 12:15
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDerniè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 ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...)