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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[MFC] recherche de nom de fonction pour éviter le clipping

n°1049510
LordHarryP​otter
Posté le 16-04-2005 à 11:54:34  profilanswer
 

Reprise du message précédent :

SquiZZ a écrit :

tu peux poster un peu le code de ta classe dérivée de CFrameWnd ?
tu peux virer les méthodes Plot*() pour alléger, le problème ne doit pas venir de ces méthodes.


oki si tu veux, voilà le .h
 

Code :
  1. #ifndef _MYMAINWINDOW_OTHELLO_H_DS_
  2. #define _MYMAINWINDOW_OTHELLO_H_DS_
  3. #include <afxwin.h>
  4. #include <afxext.h>
  5. #include "dessin.h"
  6. #include "../othello.h"
  7. const unsigned short int status_length = 3 ;
  8. class GraphiqueMainWin : public CFrameWnd
  9. {
  10. CMenu  menu_principal  ;
  11. CString  filesave;
  12. CString  fileopen;
  13. CStatusBar  status_principal ;
  14. CToolBar tool_principal  ;
  15. UINT  status_text[status_length]  ;
  16. UINT  status_width ;
  17. UINT  status_height ;
  18. UINT  width  ;
  19. UINT  height  ;
  20. Echiquier le_jeu ;
  21. Dessin*  le_visuel ;
  22. void SetStatusTextPoisition(UINT ,UINT ) ;
  23. void DrawChess(void) ;
  24. bool OuvrirFichier(void) ;
  25. bool EnregistrerFichier(void) ;
  26. public:
  27. GraphiqueMainWin();
  28. ~GraphiqueMainWin();
  29. DECLARE_MESSAGE_MAP()
  30. afx_msg void OnQuicommenceNoir();
  31. afx_msg void OnQuicommenceBlanc();
  32. afx_msg void OnQuicommenceAltern40013();
  33. afx_msg void OnAideApropos();
  34. afx_msg void OnAideManuel();
  35. afx_msg void OnOptionAffichage();
  36. afx_msg void OnPartieNouvelle();
  37. afx_msg void OnPartieEnregistrer();
  38. afx_msg void OnPartieOuvrir();
  39. afx_msg void OnPartieEnregistrerSous();
  40. afx_msg BOOL OnEraseBkgnd(CDC* ) ;
  41. afx_msg void OnLButtonUp(UINT nFlags, CPoint point) ;
  42. friend class Dessin;
  43. afx_msg void OnAideRules();
  44. };
  45. #endif /* _MYMAINWINDOW_OTHELLO_H_DS_ */


 
et le .cpp (juste les 2 fonctions qui actualisent l'écran) :
 

Code :
  1. // quand le bouton de la souris est relaché
  2. void GraphiqueMainWin::OnLButtonUp(UINT nFlags, CPoint point)
  3. {
  4. CMemDC pDC(GetDC()) ;
  5. // test si la partie courante est terminée
  6. if (le_visuel->UpdatePions(point))
  7. {
  8.  unsigned int joueur_commence ;
  9.  if (GetMenuState(menu_principal,ID_QUICOMMENCE_JOUEUR1,MF_BYCOMMAND)==MF_CHECKED)
  10.  {
  11.   joueur_commence = 1 ;
  12.  }
  13.  else
  14.  {
  15.   if (GetMenuState(menu_principal,ID_QUICOMMENCE_JOUEUR2,MF_BYCOMMAND)==MF_CHECKED)
  16.   {
  17.    joueur_commence = 2 ;
  18.   }
  19.   else
  20.    if (GetMenuState(menu_principal,ID_QUICOMMENCE_ALTERN40013,MF_BYCOMMAND)==MF_CHECKED)
  21.   {
  22.    joueur_commence = 0 ;
  23.   }
  24.  }
  25.  // On réinitialise le jeu
  26.  le_jeu.PlayAnOtherOne(joueur_commence) ;
  27. }
  28. le_visuel->PlotAll(pDC) ;
  29. }
  30. BOOL GraphiqueMainWin::OnEraseBkgnd(CDC* ppDC)
  31. {
  32. CMemDC pDC(ppDC) ;
  33. CRect rect;
  34. GetClientRect(&rect) ;
  35. status_width = rect.Width() ;
  36. width = status_width ;
  37. height = rect.Height() ;
  38. for(int i=0 ; i< status_length ; ++i )
  39.  status_principal.SetPaneInfo(i,status_text[i],SBPS_NORMAL,status_width/3);
  40.         //  si le visuel n'a pas été crée alors on l'initialise
  41.         // sinon on rafraichit
  42. if (le_visuel)
  43.  le_visuel->Refresh(pDC) ;
  44. else
  45. {
  46.  le_visuel = new Dessin(this,pDC)  ;
  47. }
  48. return FALSE;
  49. }


Message édité par LordHarryPotter le 16-04-2005 à 12:04:49
mood
Publicité
Posté le 16-04-2005 à 11:54:34  profilanswer
 

n°1049526
SquiZZ
Posté le 16-04-2005 à 12:10:33  profilanswer
 

vu la position de status_text dans la déclaration de tes variables membres, ton problème pourrait venir d'un accès en dehors des index lorsque tu touches à status_text.
Mais bon ca devrait plutot faire un gros crash plutot que ne pas afficher la toolbar ou la statusbar.
Essaie de vérifier tous tes accès à status_text.
 
[edit] question subsidiaire : tes statusbar et tolbar ont déjà marché et marchent plus ou ca  a jamais marché ?


Message édité par SquiZZ le 16-04-2005 à 12:40:27
n°1049689
LordHarryP​otter
Posté le 16-04-2005 à 15:26:30  profilanswer
 

non mes status bar, et tool bar marche, le pire c'est que si je mets la souris sur la toolbar (pour la version avec CDC au lieu de CMemDC).
Sinon je comprends pas pour "status_text" ??? ils sont en privée car il n'y a que ma classe qui doit être accessible que depuis celle-ci :o
Sinon, en faite quand ma toolbar s'efface, il "suffie" que je clique (en fait que j'enfonce le bouton de ma souris) sur l'un des boutons (que je ne vois pas mais qui se trouve çàà l'endroit où je clique) pour que ce bouton réapparaisse. Mais tout disparait denouveau au moindre changement (plein écran, ...)

n°1049807
SquiZZ
Posté le 16-04-2005 à 18:47:56  profilanswer
 

LordHarryPotter a écrit :

non mes status bar, et tool bar marche,


 
hum, ça marche mais tu les vois pas, pour moi c'est pas marcher ça.
sinon je crois que je viens de réaliser pour ton problème, la toolbar et status bar doivent être dans ta CMainFRame et pas dans ta CFrameWnd.

n°1049816
LordHarryP​otter
Posté le 16-04-2005 à 19:24:14  profilanswer
 

heu je disais que pour la version de mon programme CDC mes CToolBar et CStatusBar apparaissent et ne disparaissent pas.
 
Sinon ma CMainFrame c'est justement GraphiqueMainWin :/

n°1049833
SquiZZ
Posté le 16-04-2005 à 19:48:27  profilanswer
 

et dans ta version CDC, si tu passes une fenêtre devant ton appli t'as pas de problème avec tes toolbars/statusbar ?
 
 
sinon je suppute que t'on appli est codée n'importe comment et je te conseillerais presque de repartir d'une base propre, juste une appli MFC SDI sans doc/view créee avec l'appwizard.
 
Tu auras un OnPaint qui marche.
après tu fais tout ce qui est relatif au dessin dans OnPaint() et tu mes ton traitement a coté sans mélanger les deux.


Message édité par SquiZZ le 16-04-2005 à 19:49:03
n°1050125
LordHarryP​otter
Posté le 17-04-2005 à 14:28:41  profilanswer
 

En faite ma classe GraphiqueMainWin ne me sers qu'à traiter les messages styme boutonsouris cliquer, fenetre à redessiner ...
Ma classe Dessin comme son nom l'indique s'occupe de dessiner sur la fenetre et ne s'occuper pas de la message map

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Fonction avec Accessactive directory | recherche dans les groupes en VBS
[MFC] Plantage sur un AfxGetMainWnd()->Invalidate();Probleme avec la fonction exif_read_data()
Comment saisir et controler des valeurs ds une fonction, et ...DAO et fonction VBA
Comment reutiliser des variables dans d'autre fonction??Comment rajouter la fonction payement en ligne sur un site Web
Xemacs : Couleurs en fonction du langageFonction générique
Plus de sujets relatifs à : [MFC] recherche de nom de fonction pour éviter le clipping


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)