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 :
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).
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; }
J'initialise le thread à cet endroit :
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
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 }
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
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; }
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ON_MESSAGE(WM_TEST, CInitialisationDialog::UpdateGUI)
Merci d'avance.
Partager