Passage du handle d'une boite de dialogue dans un thread

Résolu
by_rabbit_08
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
- 19 févr. 2007 à 22:42
by_rabbit_08
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
- 20 févr. 2007 à 17:12
Bonsoir!
J'ai une question, ça fait depuis le début de la soirée que je galère avec ça, et là j'en peux plus...
Donc ma question est:
j'ai une progressbar déclarée dans une boite de dialogue (hDlg3) par fichier ressource. Ensuite, j'aimerais la faire avancer avec un Thread... Jusque là, c'est clair je crois... Donc voilà ce que je fais:

BOOL APIENTRY Dialog3Proc(HWND hDlg3,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//dans la boite de dialogue
  ShowWindow(GetDlgItem(hDlg3,ID_PROGRESS_1),SW_SHOW);
  SendDlgItemMessage(hDlg3, ID_PROGRESS_1, PBM_SETRANGE, 0, MAKELONG(0,10));
  SendDlgItemMessage(hDlg3, ID_PROGRESS_1, PBM_SETSTEP, 1, 0);
  hThread=NULL;
  hThread=CreateThread('\0','\0',ThreadProc1,&hDlg3,'\0',&ThreadId);
}

//et le procédure du thread:
DWORD WINAPI ThreadProc1(LPVOID hDlg3)
{
  SendDlgItemMessage(*(HWND*)hDlg3, ID_PROGRESS_1, PBM_STEPIT, 0, 0);
  SendDlgItemMessage(*(HWND*)hDlg3, ID_PROGRESS_1, PBM_STEPIT, 0, 0);
 //vous allez me dire pourquoi le faire 2 fois au lieu de une, ou bien pourquoi ne pas le faire plus de fois, etc... ça change rien, rien ne s'affiche...
}

Ces deux parties de codes ne sont pas dans le même fichier, mais bon ça ne change pas grand chose, parce que de toute façon, je n'arrive pas à déclarer hDlg3 plus loin que la procédure elle-même...
Donc enfait, lorsque j'exécute et tout (parce qu'il y a bcp d'autres choses aussi...), eh bien la progressbar s'affiche, mais ne se remplis pas...
Pitié de l'aide, ça serait trop cool, j'en ai vraiment plein l....
merci d'avance

2 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
20 févr. 2007 à 00:24
Les params sont 32 bits, inutile de les mettre en char pour que le compilo les REtransforme.
HWND est une valeur 32 bits, on la passe direct en param.


BOOL APIENTRY Dialog3Proc(HWND hDlg3,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  ShowWindow(GetDlgItem(hDlg3,ID_PROGRESS_1),SW_SHOW);
  SendDlgItemMessage(hDlg3, ID_PROGRESS_1, PBM_SETRANGE, 0, MAKELONG(0,10));
  SendDlgItemMessage(hDlg3, ID_PROGRESS_1, PBM_SETSTEP, 1, 0);
  // hThread=NULL; INUTILE PUISQUE AFFECTATION LIGNE SUIVANTE
  hThread = CreateThread(0, 0, ThreadProc1, (LPVOID) hDlg3, 0, &ThreadId);
}




DWORD WINAPI ThreadProc1(LPVOID hDlg3)
{
  SendDlgItemMessage((HWND)hDlg3, ID_PROGRESS_1, PBM_STEPIT, 0, 0);
  SendDlgItemMessage((HWND)hDlg3, ID_PROGRESS_1, PBM_STEPIT, 0, 0);
  return 0,
}

ciao...
BruNews, MVP VC++
3
by_rabbit_08
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
1
20 févr. 2007 à 17:12
Yes Merci!! tu m sauves la vie! merci bcp!
0