dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004
-
16 avril 2004 à 14:20
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004
-
17 avril 2004 à 10:13
bonjour,
voici mon probleme:
J'ai une application mfc constitue de plusieur boite de dialogue s'ouvrant a la suite des autres. J'ai un thread qui lit en memoire partagee si un autre process a recu une erreur.
Le probleme c que quand mon thread detecte l'erreur, je souhaiterais lui faire afficher une messagebox, quel que soit la boite modale ou je me trouve.
Pour l'instant ce messagebox s'affiche mais sous ma fenetre en cours. Comment faire pour qu'elle s'affiche en premier plan et qu'elle y reste,, meme si l'utilsateur clique en dehors de son cadre.
Voila mon thread pour le moment:
UINT Threaddetecerreur( LPVOID param )
{ MESSAGE_ERREUR Erreur;
Sleep(100);
for (;;)
{Sleep (100);
Erreur=receptionmemparterreur();
if (Erreur.CodeErreur_materiel==1) {MessageBox(NULL,"erreur sur l'ouverture du port COM1","Erreur",MB_ICONEXCLAMATION | MB_OK);
RtSetEvent(validfinfin); //fermeture process RTX
ExitProcess(0); //fermeture process windows
}
}
}
je sais que le premier parametre correspond a l'handle de la fenetre mere mais je ne sais pas comment la recupere puisque j'ai plusieurs boite modale cree avec domodal.
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 14:34
dsl, mais ca ne marche pas, ma fenetre message box est toujours sous ma premiere fentre.
voila maintenant la structure de ma messagebox, c bien ca?
MessageBox(GetFocus(),"erreur sur l'ouverture du port COM1","Erreur",MB_ICONEXCLAMATION | MB_OK);
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 14:47
et bien en fait c pas sur une fenetre en particulier que je le voudrais mais sur la fenetre (dialog) en cours.
Comment faire pour passer le handle en entree du thread afin que celui ci soit remis a jour tte les 100 ms?
Encore merci, dsl si ca marche pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 15:00
et bien en fait mon thread n'est aps cree avec createthread mais afxbegin thread:
AfxBeginThread (Threaddetecerreur,NULL);
j'ai essayer de mettre le parametre handle en entree du thread mais getfocus me retourne a ce niveau NULL; dc ca va pas.
n'y a t'il pas une autre solution pour faire que ce messageox soit en premier plan?
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 15:13
ca va pas. resumons, voila ce que j'ai:
**focus est une variable globale mise a jour a l'initialisation de la fentre en cours par getfocus
**L4appel du thread:
AfxBeginThread (Threaddetecerreur,focus);
**Le thread:
UINT Threaddetecerreur( HANDLE focus )
{ MESSAGE_ERREUR Erreur;
Sleep(1000);
for (;;)
{Sleep (1000);
Erreur=receptionmemparterreur();
if (Erreur.CodeErreur_materiel==1) {MessageBox((HWND) focus,"erreur sur l'ouverture du port COM1","Erreur",MB_ICONEXCLAMATION);
RtSetEvent(validfinfin); //fermeture process RTX
ExitProcess(0); //fermeture process windows
}
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 avril 2004 à 15:20
Si focus est une variable globale alors plus besoin de param, tu dois poouvoir t'en servit depuis la func de thread.
A part cela, ce n'est pas un thread auxiliaire qui devrait afficher les massages et encore moins fermer le prog par un appel sauvage de ExitProcess. Le thread devrait envoyer un message d'erreur a la fenetre courante qui se chargerait de l'affichage et fermerait proprement le prog.
Envoi par PostMessage un WM_USER+xxx avant sortie du thread en cas d'erreur.
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 15:25
peut tu me donner un peu plus de precision sur ce dernier point, si ca ne te derange pas:
*pourquoi ne pas se servir de afxbeginthread
*comment marche et comment ffaut t'il faire pour poster des messages a la fenetre.
dambeaufort
Messages postés60Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention17 septembre 2004 16 avril 2004 à 15:46
encore une chose, comment traiter le message dans la fenetre et par quelle fonction?
j'ai deja un pretranslatemessage pour chaque fenetre est ce que ca peut etre bon aussi pourr le message envoye par le thread?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 avril 2004 à 16:00
J'ai abandonne depuis longtemps MFC pour ne plus voir tout ce sabir ni ne plus avoir a retenir une seconde couche API qui masque la vraie.
Fait en vrai win32 serait:
switch(message) {
case ERR_THREAD:
MessageBox(hwnd, ...);
....
cs_grems
Messages postés50Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2004 16 avril 2004 à 19:36
:sad) Hoooo !! :sad)
comment tu casse le moral brunews !
je dis juste ke pour afficher une message box en premier plan (à condition ke son affichage ne pose pa de pb), quelque soit ce kon démarre komme application, ce paramètre fonctionne, c tou !!
Moi je débute et je te rapelle ke sa kestion étai :Pour "l'instant ce messagebox s'affiche mais sous ma fenetre en cours. Comment faire pour qu'elle s'affiche en premier plan et qu'elle y reste,, meme si l'utilsateur clique en dehors de son cadre."
Et j'y réponds parfaitement !!! car ca marche,je m'en sers !
cs_grems
Messages postés50Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2004 16 avril 2004 à 19:57
Un message box reste un message box , non ?
si tu dis cela c'est ke tu as testé, moi pas DANS CES CONDITIONS :) . Maintenant, au vu de ce kil demande je ne vois pa pourkoi ca ne marcherai pa. sinon di le moi, ke je me couche moins bête ce soir stp :big)