Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2587 connectés 

 


Dernière réponse
Sujet : [MFC] Problème de rafraichissement d'une CView et CWinApp:OnIdle
n0mad La méthode RedrawWindow lance des evenements dans tous les sens (WM_PAINT, WM_NCPAINT etc...) , ce qui n'est pas optimisé du tout car le rendu 3D est très ralenti par les fonctions GDI.
 
Render est une méthode perso ajouté dans CView qui contient le rendu de la scène 3D. Ce que je ne comprends pas, c'est pourquoi en appelant ma méthode Render directement dans OnIdle, l'affichage ne se se met à jour.  
 
Avec RedrawWindow, ça marche mais c'est lent & ça clignote (effacage du background).
 
Voila pour les précisions.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
n0mad La méthode RedrawWindow lance des evenements dans tous les sens (WM_PAINT, WM_NCPAINT etc...) , ce qui n'est pas optimisé du tout car le rendu 3D est très ralenti par les fonctions GDI.
 
Render est une méthode perso ajouté dans CView qui contient le rendu de la scène 3D. Ce que je ne comprends pas, c'est pourquoi en appelant ma méthode Render directement dans OnIdle, l'affichage ne se se met à jour.  
 
Avec RedrawWindow, ça marche mais c'est lent & ça clignote (effacage du background).
 
Voila pour les précisions.
youdontcare le invalidate() est pour le painting win32 ... y'a quoi exactement dans render() ?
H4dd3R Je ne vois pas pquoi ça plante (si m_pMainWnd est bien le bon CMyView ya pas de raison)..
 
T´as essayé:

Code :
  1. BOOL CMyApp:: OnIdle() {
  2.   ((CMyView*) m_pMainWnd)->Invalidate()
  3.   return TRUE;
  4. }


pour qu´il aille ds OnDraw?? :)

n0mad Voila, je suis en train d'ajouter une fenetre avec du Direct3D dans une appli générée précedemment par l'appwizard de VC++ 6.0
 

Code :
  1. // L'affichage est géré comme suit dans le OnDraw
  2. void CMyView:: OnDraw(CDC* pDC) {
  3.     Render();   // Render() est une méthode de CMyView
  4. }
  5. // Puis j'ai overridé le OnIdle de CWinApp pour rafraichir la vue :
  6. BOOL CMyApp:: OnIdle() {
  7.    ((CMyView*) m_pMainWnd)->RedrawWindow(NULL,NULL,RDW_INVALIDATE); // ça ça marche nickel
  8.    ((CMyView*) m_pMainWnd)->Render(); // ça ça marche pô : pourquoi ?????
  9.    return TRUE;
  10. }


 
Y a ptêtre des erreurs de recopie mais la question que je pose, c'est pourquoi ça foire en appelant directement Render sans passer par le OnDraw. Il n'y a aucune raison tangible. Je comprends rien. Dans ce cas là, la vue ne se met à jour que lors d'un resize.
 
Indice supplémentaire : Render() n'utilise à aucun moment un CDC* ou un CWnd*. Render() effectue des appels Direct3D très basiques.
 
J'ai pas envie de réécrire toute mon appli sans MFC pour juste ajouter un peu de direct3D.
 
Merci par avance.
 
PS :  
Youdontcare, tes conseils dans mon précédent topic m'ont été très utiles. La doc PLanetSide est très instructive.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR