Problème de raffraîchissement avec threads
Bonjour,
La fenêtre de mon application (LPMainFrame héritant de CFrameWnd) possède une méthode setEtatMenu(...) qui modifie la visibilité des contrôles de cette fenêtre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
void LPMainFrame::setEtatMenu(EtatMenu nouvelEtat)
{
etatMenu = nouvelEtat;
if (etatMenu == MAXIMISE)
{
Invalidate(); // Redessine le fond du menu
m_precButton.ShowWindow(SW_SHOW); // Rend tout visible
m_suivButton.ShowWindow(SW_SHOW);
m_serviceButton.ShowWindow(SW_SHOW);
m_labelService.ShowWindow(SW_SHOW);
m_tousLesServicesButton.RefreshBkgrnd(); // Raffraîchi les autres boutons
m_servicesLancesButton.RefreshBkgrnd();
if (LPControl::getInstance()->getModele()->getNbServicesExec() == 0)
m_servicesLancesButton.EnableWindow(false);
else m_servicesLancesButton.EnableWindow(true);
m_quitterButton.RefreshBkgrnd();
}
...
} |
Cette méthode fonctionne parfaitement lorsqu'elle est appelée suite à la détection d'un clic souris sur l'un des contrôles :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
void LPMainFrame::OnRangeClickButton(UINT nID)
{
switch (nID)
{
case IDC_SERVICE:
InfosApplication* infosApplication = LPControl::getInstance()->getModele()->getInfosApplication(indexService);
LPControl::getInstance()->useService(infosApplication);
setEtatMenu(MINIMISE);
break;
...
}
} |
En revanche, lorsqu'elle est appelée par un thread, la méthode setEtatMenu(...) est totalement inopérante.
Le thread est créé par la méthode CreateThread(...).
Je pense avoir donné les informations essentielles.