Etrange comportement SendDlgItemMessage()

tbpacker Messages postés 10 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 juin 2009 - 21 janv. 2007 à 14:19
tbpacker Messages postés 10 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 juin 2009 - 22 janv. 2007 à 20:54
Bonjour.
J'ai un probleme avec une progress bar en ressource sur un dialog.La progress bar est initialisé lors de WM_INITDIALOG jusqu'a la tout va bien mais je n'arrive pas à la faire avancer avec SendDlgItemMessage(dlg, IDE_PB, PBM_STEPIT, 0, 0); lorsque que cette fonction est appelée hors de la procédure du Dialog.Si je la case dans INITDIALOG tout va bien.Etrange non?
G testé en faisant un GetDlgItem() suivit d'un SendMessage() meme probleme tant que l'appel de la fonction n'est pas dans la proc.
Si quelqu'un a une solution...

(j'utilise DEV cpp et g fai les bons link et remplacer la classe progress en rc par "msctls_progress32" son vrai nom)

6 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
21 janv. 2007 à 17:46
Salut,
Difficile de trouver la cause du problème sans code source. Si ton code n'est pas long tu peux le poster ici. Sinon tu peux le réduire pour ne laisser que le strict minimum et le poster afin qu'on puisse voir ce qui cloche.
0
tbpacker Messages postés 10 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 juin 2009
21 janv. 2007 à 19:05
voila g fait du tri selctif(virer les includes,virer la proc de fenetre principal ki marche nickel etc).Le thread se lance nickel g verifier avec un affichage ds le static du dialog.mais rien ne se passe pr la progress bar?portée de la fonction SendDlgItemMessage()?my connais pas trop mais peu probable a mon avis.g du faire une vielle erreur toute bete.

void teststep(void);   //la fonction ki appel SendDlgItemMessage()
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
BOOL APIENTRY Dialog1Procedure(HWND ,UINT ,WPARAM ,LPARAM );
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD ThreadId;
HANDLE hT;

HWND dlg;
HWND progressb;

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
   InitCommonControls();  //init de la lib
                 
 
         
      
    CreateDialog(hInst, "DIALOG1" , hwnd, (DLGPROC)Dialog1Procedure);  
    hT=CreateThread(NULL,0,ThreadProc1,NULL,0,&ThreadId);       

    ShowWindow (dlg, nFunsterStil);
  
}

///////////////            Procedure de la boite de dialogue            ////////////////////////////////////////////
BOOL APIENTRY Dialog1Procedure(HWND dlg,UINT message,WPARAM wParam,LPARAM lParam)
{
    
    switch (message)
    {
      case WM_INITDIALOG:
         infos = CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE ,18,5,350,30,dlg,0,hInst, NULL);
         ///////////////////////// init de la progress//////////////////////////////
         SendDlgItemMessage(dlg, IDE_PB, PBM_SETRANGE, 0, MAKELONG(0,10));
         SendDlgItemMessage(dlg, IDE_PB, PBM_SETSTEP, 1, 0);
         teststep(20);
      return TRUE;
           
      case WM_CREATE:  
           break;

      case WM_COMMAND:
           switch (LOWORD(wParam))
           {     
                  case IDCANCEL:
                       EndDialog(dlg,0);
                  return TRUE;                           
           }
      default:
         return FALSE;
    }
}

///////////////////////                      thread proc 1             ////////////////////////////////////////
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
   
    teststep();
  
    return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

void teststep()
{
     SendDlgItemMessage(dlg, IDE_PB, PBM_STEPIT, 0, 0);  
}
     
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
21 janv. 2007 à 23:22
Salut,
Ton thread n'appelle  teststep() qu'une fois non ?
Donc tu ne vois rien.
0
tbpacker Messages postés 10 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 juin 2009
22 janv. 2007 à 00:43
Et alors?
Si j'envoie le SendDlgItemMessage() UNE seule fois dans la proc du dialog ca marche!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
22 janv. 2007 à 14:07
Il faut peut etre placer le ShowWindow() avant l'appel au thread dans le WinMain().
0
tbpacker Messages postés 10 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 juin 2009
22 janv. 2007 à 20:54
Le ShowWindow() comme tu dis ne sert strictement a rien. Lors de la creation de dialog box en ressource la boite est dessinée par defaut par CreateDialog() avec les controles et les contours de la progress bar.Ds un prog qui affiche une fenetre puis un dialogue supprime cette fonction et tu verra cela fonctionne aussi bien.
Merci kan m de prendre le tps de me suggerer qqch.
Ce bug reste néanmoins des plus étrange.
0
Rejoignez-nous