2 boites de dialogues dans un thread secondaire - C++ - Programmation
Marsh Posté le 22-07-2008 à 20:23:26
multi-thread+fenere modale qqpart ca sent pas bon. Pourquoi ne pas avoir des fenetres non modales ?
Marsh Posté le 23-07-2008 à 00:06:30
la principale n'est pas modale mais pour la seconde, je souhaite le comportement d'une fenetre modale (attente de l'appui d'un bouton pour continuer le reste)
Marsh Posté le 23-07-2008 à 23:37:10
mon appli est décomposée en plusieurs threads pour effectuer des taches précises.
Parmi elles, il y a le thread pour la partie IHM.
Marsh Posté le 23-07-2008 à 23:38:57
ok, mais bon, ttes tes fenetres appartiennent à ce seul thread, sinon je vois pas l'interet
Marsh Posté le 24-07-2008 à 00:14:55
en effet, toutes les ihms appartiennent au même thread comme indiqué dans la portion de code que j'ai donné.
Marsh Posté le 28-07-2008 à 18:57:29
personne n'a une idée????
Que se passe t'il lorsqu'il y a deux peekMessage() qui tournent en même temps (1 dans le thread depuis lequel l'ihm principale tourne et l'autre dans la fonction doModal() de la deuxieme boite de dialogue)?
Marsh Posté le 22-07-2008 à 18:28:57
bonjour,
Pour une application, utilisant visual2008 et les MFC, je crée un thread dans lequel je crée mon IHM principale (create (IDD...) puis ShowWindow()).
A la sélection d'un item du menu de l'IHM principale, je souhaite crée une boite de dialogue modale dont l'IDD est attaché à une classe.
Au final, à l'affichage de la deuxieme boite de dialogue, il n'est plus possible de cliquer, ni sur l'une ni sur l'autre, comme si elles etaient occupées. En mode debug, je m'apperçois que le code est bien dans le peekMessage de la fonction DoModal(). Y aurait-il un conflit quelque part?
Pour illuster voici les parties du code :
procedure du thread secondaire :
// Creation de l'IHM principale //
CIhmPrincipal main_ihm ;
//affichage de l'IHM principale
main_ihm.StartIhm();
dans le constructeur de la classe de l'IHM principale :
AfxGetApp()->m_pMainWnd = this;
this->Create(IDD_IHM_PRINCIPAL);
Fonction StartIhm() :
...
this->ShowWindow(SW_SHOWMAXIMIZED);
Dans la fonction appelée à la selection de l'item du menu:
int result = 0;
this->SetForegroundWindow();
m_pcIhmSecond = new CIhmSecond(this);
result = m_pcIhmSecond->DoModal();
Merci d'avance.