[MFC] Rafraichissement d'une CDialog avec barre de progression
Salut à tous,
Voici le problème : j'ai une boîte de dialogue dont l'affichage doit se mettre à jour en parallèle avec un gros traitement (des chargements à partir de fichiers).
Pour ce faire, j'ai la fonction suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
long CInitialisationDialog::UpdateGUI(WPARAM wparam,LPARAM lparam)
{
if (ind ==0)
{
//traitement 0
}
// etc...
if (ind == 5)
{
// traitement 5
}
UpdateData(false);
ind++;
PumpMessages();
return 0;
} |
En gros, j'ai découpé le traitement en plusieurs plus petit. Dans chaque sous-traitement, je mets à jour une CString qui doit s'afficher dans ma CDialog. Le but du jeu est d'affecter cette fonction à un thread qui effectue chaque sous-traitement en fonction de l'entier ind (qui est incrémenté à chaque itération).
J'initialise le thread à cet endroit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
BOOL CInitialisationDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_progress.SetRange(0,6);
m_progress.SetPos(0);
AfxBeginThread(InitThread,GetSafeHwnd(),THREAD_PRIORITY_HIGHEST);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
} |
Et la fonction du thread est la suivante :
Code:
1 2 3 4 5 6 7 8
|
UINT CInitialisationDialog::InitThread(LPVOID pParam)
{
HWND hWnd= reinterpret_cast< HWND >( pParam) ;
::PostMessage(hWnd,WM_TEST,0,0) ;
return 0;
} |
En gros, j'envoie un message WM_TEST à chaque itération. J'ai bien pensé à ajouter cette ligne dans la message map:
Code:
ON_MESSAGE(WM_TEST, CInitialisationDialog::UpdateGUI)
Voilà, je pense avoir tout bien (j'ai essayé de recouper toutes les infos trouvées sur le forum), mais rien ne se passe à l'affichage (pour le moment, je ne gère pas trop la progress bar, mais ça devrait déjà marcher avec la CString). Vous avez des idées ?
Merci d'avance.