begin process at 2012 05 30 11:02:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

qst messagebox


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

qst messagebox

vendredi 16 avril 2004 à 14:20:29 | qst messagebox

dambeaufort


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.

Merci
vendredi 16 avril 2004 à 14:23:58 | Re : qst messagebox

BruNews

Administrateur CodeS-SourceS
GetFocus() en 1er param de MessageBox().

ciao...
BruNews, Admin CS, MVP Visual C++
vendredi 16 avril 2004 à 14:34:35 | Re : qst messagebox

dambeaufort


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);
vendredi 16 avril 2004 à 14:40:04 | Re : qst messagebox

BruNews

Administrateur CodeS-SourceS
Depend de qui a le focus a ce moment.
Si tu veux MessageBox modal sur une fenetre en particulier, passe le handle en param du thread.

MB_OK est egal ZERO alors
MB_ICONEXCLAMATION | MB_OK
strictement inutile
MB_ICONEXCLAMATION seul sera idem.

ciao...
BruNews, Admin CS, MVP Visual C++
vendredi 16 avril 2004 à 14:47:38 | Re : qst messagebox

dambeaufort


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
vendredi 16 avril 2004 à 14:57:02 | Re : qst messagebox

BruNews

Administrateur CodeS-SourceS
On met
(LPVOID) hwnd
en 4eme param de CreateThread.
Faut voir dans le sabir MFC ou se trouve le param de thread, la c'est ton affaire.

ciao...
BruNews, Admin CS, MVP Visual C++
vendredi 16 avril 2004 à 15:00:11 | Re : qst messagebox

dambeaufort


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?
vendredi 16 avril 2004 à 15:03:49 | Re : qst messagebox

BruNews

Administrateur CodeS-SourceS
Mais enfin si tu passes le hwnd de focus, bien entendu tu n'utilises plus GetFocus() mais le pparam du thread.

MeassageBox((HWND) pparam, ....

ciao...
BruNews, Admin CS, MVP Visual C++
vendredi 16 avril 2004 à 15:13:35 | Re : qst messagebox

dambeaufort


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
}

}
}
vendredi 16 avril 2004 à 15:20:55 | Re : qst messagebox

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, Admin CS, MVP Visual C++

1 2 3 4

Cette discussion est classée dans : erreur, process, boite, thread, messagebox


Répondre à ce message

Sujets en rapport avec ce message

MFC - Accéder à un Control Active X via un Thread ? [ par Kikyo ] Oui, j'ai créé un programme MFC basé sur une Boite de Dialog. J'ai ajouté à cette boite un Control ActiveX. Je peux modifier les paramètres de ce cont Capturer l'Id d'une process quant on a son ThreadID [ par illupo ] Salut,je cherche à obtenir l'ID d'un process connaissant l'ID du Thread qui s'y rattache.Sur MSDN ils disent d'utiliser cette fonction :ThreadId = Get Affichage CDialog dans un autre thread [ par sanouk ] Bonjour,Je veux afficher une boite de dialogue dans un thread secondaire. J'utilise pour cela CWinThread qui créé ma boite de dialogue.Dans ma classe multi process, multi thread [ par hobbes ] Bonjour,je cherche quels sont les avantages et les inconvennients entre le multi thread et le multi process lorsque l on programme en C++ sous visual. Afficher une variable provenant d'un Thread ds une boite de dialogue [ par matge ] BonjourJe travaille avec une boite de dialogue qui lance un Thread de service. J'enregistre des variables dans ceThread, j'aimerais les afficher dans GetSecurityInfo [ par Nebula ] Bonjour,J'utilise la fonction GetSecurityInfo pour récupérer les informations d'un process (le process courant, en l'occurence). Tout se passe bien sa MessageBox dans une boite de dial m_pMainWnd [ par gagaet22 ] Bonsoir à vous, Voilà mon interrogation : Je fait une boite de dial simple :     m_pMainWnd = dlg;     int nResponse = dlg->DoModal();     if (nRe detection d'un messageBox et fermeture automatique [ par elroulianito ] J'aimerai utiliser une fonction issue d'une dll. Le problème est qu'à l'execution de celle-ci une fenêtre de type messagebox apparait m'invitant à cli Détecter une erreur dans un process ? [ par chuckboy ] Bonjour à tousJe cherche à détecter une erreur dans un process externe.J'explique , je lance un process "CreateProcess(NULL, (LPTSTR)sExecutable.c_str Curseur de la souris... [ par dbiare ] Bonjour, Je travail sous Visual C++6. Dans mon application, j’ai une boite de dialogue et parallèlement j’ai un ‘Thread’ qui tourne en tache de fond.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales