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

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] Plantage sur un AfxGetMainWnd()->Invalidate();

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] Plantage sur un AfxGetMainWnd()->Invalidate();

n°1033386
dreamkille​r
Posté le 03-04-2005 à 00:49:40  profilanswer
 

Bonsoir a tous voila j'ai un ptit probleme sur la fonction AfxGetMainWnd()->Invalidate() de mon prog ca me cause un plantage generalisé voila si qq a une idée
 
 

Code :
  1. UINT ThreadHorloge(LPVOID pParam)
  2. {
  3. CHologe* pObject = (CHologe*)pParam;
  4. bool bTopSeconde=false;
  5. CTime horloge /*= CTime::GetCurrentTime()*/;
  6. int nHeure;
  7. int nMin;
  8. int nSec;
  9. while(pObject->m_bFin!=true)
  10. {
  11.  horloge = CTime::GetCurrentTime();
  12.  nHeure=horloge.GetHour();
  13.  nMin=horloge.GetMinute();
  14.  nSec=horloge.GetSecond();
  15.  pObject->m_strHeure.Format("%d",nHeure);
  16.  pObject->m_strMin.Format("%d",nMin);
  17.  pObject->m_strSec.Format("%d",nSec);
  18.  /*CPCControleDlg *ihm=*/AfxGetMainWnd()->Invalidate();
  19.  Sleep(1000);
  20. }
  21. return 1;
  22. }


 
 
merci de votre aide :hello:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
mood
Publicité
Posté le 03-04-2005 à 00:49:40  profilanswer
 

n°1033390
IrmatDen
Posté le 03-04-2005 à 00:56:20  profilanswer
 

Cette fonction est-elle un thread ? Parce que, si cela fonctionne comme Qt, les éléments de l'UI ne peuvent pas être manipulés par un autre thread que celui de l'UI et il faut passer par des événements personalisés.

n°1033393
dreamkille​r
Posté le 03-04-2005 à 01:03:04  profilanswer
 

ouai c'est bien un thread  :sweat:  
 
Et tu entend quoi par événements personnalisés :??:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033397
SquiZZ
Posté le 03-04-2005 à 01:05:45  profilanswer
 

si ton pObject est utilisé par plusieurs threads faudrait voir a le protéger par une section critique, les CString sont assez  chatouilleuses sur les accès concurents.
 
Si ca ne vient pas de ca, essaie d'utiliser RedrawWindow à la place de Invalidate.
 
Si ca ne résoud toujours pas le problème poste un message à ta mainwindow et gère le rafraichissement de ta fenetre dans le handler de ce message.

n°1033398
dreamkille​r
Posté le 03-04-2005 à 01:09:41  profilanswer
 

nan j'ai qu un thread et les CString son modifier seulement ici donc pas de prob
pour le redraw j'essaye de suite


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033399
dreamkille​r
Posté le 03-04-2005 à 01:10:44  profilanswer
 

meme erreur  :pt1cable:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033400
SquiZZ
Posté le 03-04-2005 à 01:10:46  profilanswer
 

dreamkiller a écrit :

nan j'ai qu un thread


 
et le thread principal de ton appli il compte pas ?

n°1033401
dreamkille​r
Posté le 03-04-2005 à 01:12:55  profilanswer
 

la fonction pour envoyer un message c'est bien PostMessage mais je fais comment pour le recevoir et rafraichir apres :??:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033404
IrmatDen
Posté le 03-04-2005 à 01:22:48  profilanswer
 

dreamkiller a écrit :

Et tu entend quoi par événements personnalisés :??:


Je voulais parler des messages, désolé j'ai perdu le vocabulaire Win32  :whistle: En plus tu dois pouvoir envoyer un message WM_PAINT si mes souvenirs sont bons...
Si ça ne marche pas, pour recevoir le message je pourrais pas t'aider beaucoup... Peut-être que le code de cette page te donnera des indices: http://www.codeproject.com/dialog/idledialog.asp

n°1033405
SquiZZ
Posté le 03-04-2005 à 01:27:51  profilanswer
 

tu te déclare une méthode  

Code :
  1. afx_msg void Toto(WPARAM,LPARAM);


 
et tu edites ta message map :

Code :
  1. BEGIN_MESSAGE_MAP(CTestInvalidateDlg, CDialog)
  2. /* ..... */
  3. ON_MESSAGE(WM_USER+1, Toto)
  4. END_MESSAGE_MAP()


 
sinon envoyer WM_PAINT n'est pas une bonne idées :
http://msdn.microsoft.com/library/ [...] w_88ac.asp
"
The WM_PAINT message is generated by the system and should not be sent by an application
"

mood
Publicité
Posté le 03-04-2005 à 01:27:51  profilanswer
 

n°1033406
dreamkille​r
Posté le 03-04-2005 à 01:31:25  profilanswer
 

je galere a envoyé un message
 
je croit que c'est du type  
 
CIhmDlg fen1.PostMessage(WM_PAINT);
 
mais j'suis pas sur qq peut t'il eclairer ma lanterne :jap:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033408
dreamkille​r
Posté le 03-04-2005 à 01:32:43  profilanswer
 

SquiZZ a écrit :

tu te déclare une méthode  

Code :
  1. afx_msg void Toto(WPARAM,LPARAM);


 
et tu edites ta message map :

Code :
  1. BEGIN_MESSAGE_MAP(CTestInvalidateDlg, CDialog)
  2. /* ..... */
  3. ON_MESSAGE(WM_USER+1, Toto)
  4. END_MESSAGE_MAP()


 
sinon envoyer WM_PAINT n'est pas une bonne idées :
http://msdn.microsoft.com/library/ [...] w_88ac.asp
"
The WM_PAINT message is generated by the system and should not be sent by an application
"


et je la declare ou la methode???


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033409
IrmatDen
Posté le 03-04-2005 à 01:34:15  profilanswer
 

ahem.. oops, désolé de l'erreur :/ ...

n°1033410
SquiZZ
Posté le 03-04-2005 à 01:35:56  profilanswer
 

dreamkiller a écrit :

et je la declare ou la methode???


DTC?  
 

n°1033411
dreamkille​r
Posté le 03-04-2005 à 01:36:02  profilanswer
 

pas grave ca arrive :)  
Au point ou j'en suis toutes les solutins me semble bonne  :D


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033412
dreamkille​r
Posté le 03-04-2005 à 01:37:43  profilanswer
 


a c'est d'une finesse :heink:


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033413
SquiZZ
Posté le 03-04-2005 à 01:40:20  profilanswer
 

dreamkiller a écrit :

a c'est d'une finesse :heink:


 
 :pfff:  
essaie de reflechir un peu.
Ou tu peut la déclarer à ton avis ?
dans la classe de la fenetre que tu veux rafraichir par exemple, ca me semblerait pas mal, non ?

n°1033414
dreamkille​r
Posté le 03-04-2005 à 01:44:52  profilanswer
 


 :o :o  :o  :o  :o  :o  
excuze moi si je cale rien mais j'ai jamais crée de message.
J ai toujours utilisé les messages par default
 
 
et je sais pas quoi faire de mon BEGIN_MESSAGE_MAP


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033415
SquiZZ
Posté le 03-04-2005 à 01:48:51  profilanswer
 

t'y fais rien, tu rajoutes juste le ON_MESSAGE() kivabien dans la message map qui existe déjà entre BEGIN_MESSAGE_MAP et END_MESSAGE_MAP
 

n°1033499
dreamkille​r
Posté le 03-04-2005 à 11:47:23  profilanswer
 

erreur de linkage
 
PC ControleDlg.obj : error LNK2001: unresolved external symbol "protected: void __thiscall CPCControleDlg::Toto(unsigned int,long)" (?Toto@CPCControleDlg@@IAEXIJ@Z)
 


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033515
SquiZZ
Posté le 03-04-2005 à 12:14:54  profilanswer
 

tu ouvres ton fichier cpp et dedans tu ajoutes

Code :
  1. void CPCControleDlg::Toto(WPARAM,LPARAM)
  2. {
  3. // mettre du code ici
  4. }


 
t'as des notions de C ou de C++ ou tu tappes au hazard sur les touches de ton clavier ?

n°1033611
dreamkille​r
Posté le 03-04-2005 à 16:23:48  profilanswer
 

reste calme reste calme :fou:  :fou:  
 
si tu me donne moitier des infos aussi deja que je sais pas a quoi corresponde WPARAM et LPARAM


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033616
dreamkille​r
Posté le 03-04-2005 à 16:31:40  profilanswer
 

et l'envoi du message c'est ca ou pas
 
CPCControleDlg fen1;
fen1.PostMessage(WM_USER+1);


---------------
debian sib sur asus a6va peut etre prochainement un freebsd
n°1033778
SquiZZ
Posté le 03-04-2005 à 19:19:41  profilanswer
 

WPARAM et LPARAM sont des données que tu peux spécifier quand tu fais ton PostMessage
par exemple

Code :
  1. AfxGetMainWnd()->PostMessage(WM_USER+1, 13, 42)


 
 

mood
Publicité
Posté le   profilanswer
 


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

  [MFC] Plantage sur un AfxGetMainWnd()->Invalidate();

 

Sujets relatifs
[MFC] Violation d'accès en lecture ? pourquoi ?[MFC] Problème avec OnPaint et un Timer
:hello: Dessinez c'est gagnez en C++ / MFC[Visual C++ - MFC] DLL et Notification d'événements (OnAccept)
MFC Problème d'affichage (OnPaint() et ON_WM_PAINT())[MFC]Thread
[MFC] Bitmap[+/-MFC] Visibilité de variables et fenêtre fille
[MFC/C++] Problème d'initialisation de CListCtrlavicap sans une GUI MFC
Plus de sujets relatifs à : [MFC] Plantage sur un AfxGetMainWnd()->Invalidate();


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