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

  FORUM HardWare.fr
  Programmation

  [MFC] Problème de rafraichissement d'une CView et CWinApp:OnIdle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] Problème de rafraichissement d'une CView et CWinApp:OnIdle

n°65517
n0mad
inscrit au XXe siècle
Posté le 16-10-2001 à 14:51:37  profilanswer
 

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.


---------------
Pipiru piru piru pipiru pi
mood
Publicité
Posté le 16-10-2001 à 14:51:37  profilanswer
 

n°65592
H4dd3R
Q2
Posté le 16-10-2001 à 17:32:48  profilanswer
 

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?? :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°65613
youdontcar​e
Posté le 16-10-2001 à 18:51:34  profilanswer
 

le invalidate() est pour le painting win32 ... y'a quoi exactement dans render() ?

n°65719
n0mad
inscrit au XXe siècle
Posté le 17-10-2001 à 11:46:19  profilanswer
 

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.


---------------
Pipiru piru piru pipiru pi

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [MFC] Problème de rafraichissement d'une CView et CWinApp:OnIdle

 

Sujets relatifs
Problème accents : conversion BDD DBASE en MYSQL[PHP] Setcookie et header("location:...") Problème???????
[phpBB] Ben oui, j'ai un probléme.......[Delphi] Problème avec winsock (pour un chat)
[Visual C++ 6] Problème de Chargement[MFC] Comment utiliser ListView_SetExtendedListViewSt yle ...
probleme avec SQL Server 2000 et SP1petit problème ac mon système d'jout de commentaire
Problème de Position, de Couleurs et de Texte...[Visual C++] Problème tout con avec un EditBox...
Plus de sujets relatifs à : [MFC] Problème de rafraichissement d'une CView et CWinApp:OnIdle


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