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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.