[Win32, C++] Création d'une progressbar

Création d'une progressbar [Win32, C++] - C++ - Programmation

Marsh Posté le 05-07-2006 à 21:58:16    

Salut  :D ,
 
J'aimerai mettre une progresse bar dans mon petit programme Win32, mais le problème est que je n'arrive pas a la faire  :sweat: J'ai fais des tonnes de recherche sur Internet et soit c'est du MFC (j'y connais rien et j'en veux pas) soit c'est in-compilatible (francais ?).
 
J'ai pourtant lu un tutoriel qui disait que la progress bar été une des choses les plus facile à créer, mais moi la j'chui largué...
 
Petite précision, j'aimerai une barre smooth et l'avancé de la barre en seconde (pré-réglé par moi évidement).
 
Sur ce j'en laisse à votre géni ++ et merci !
 
PS : PAS DE MFC SIL VOUS PLAIT.

Reply

Marsh Posté le 05-07-2006 à 21:58:16   

Reply

Marsh Posté le 05-07-2006 à 22:45:02    

hum, pas mal de trucs à faire avant de créer une ProgressBar en Win32. 1ere chose à savoir : ce controle fait partie de la collection des Common Controls, tu dois donc, avant de l'utiliser, appeler la fonction InitCommonControls(), qui prend en paramètre un pointeur sur une structure INITCOMMONCONTROLSEX que tu rempliras de la façon suivante :

Code :
  1. iccs.dwSize = sizeof(INITCOMMONCONTROLSEX);
  2. iccs.dwICC  = ICC_PROGRESS_CLASS;


le membre dwICC rempli avec la constante ICC_PROGRESS_CLASS indique que tu vas créer une ProgressBar. ensuite, tu peux appeler InitCommonControls().
 
puis, tu interceptes le message WM_INITDIALOG de ta dialog parent, et dans ce message tu créé ta ProgressBar :

Code :
  1. switch(Msg)
  2. {
  3.    case WM_INITDIALOG:
  4.       CreateWindowEx(0, PROGRESS_CLASS, WS_CHILD | WS_VISIBLE | PBS_SMOOTH, 10, 10, 100, 20, hWndDlg, NULL, hInst, NULL);
  5.       return true;
  6. (...)
  7. }


je te renvoie à la MSDN pour l'explication des différents paramètres de CreateWindowEx si tu ne les connais pas :
http://msdn.microsoft.com/library/ [...] ndowex.asp
 
tu dois ensuite indiquer à la ProgressBar ses valeurs mini et maxi. ça se fait en lui envoyant le message PBM_SETRANGE via SendMessage() :

Code :
  1. SendMessage(hProgress, PBM_SETRANGE, 0, MAKELONG(0, 100));


le paramètre wParam ne sert pas ici. lParam contient l'échelle de valeurs de ta ProgressBar (ici de 0 à 100). la macro MAKELONG sert à créer ce paramètre.
puis tu indiques la valeur d'incrément de ta Bar, de la même façon via le message PBM_SETSTEP : wParam contiendra l'incrément tandis que lParam ne sera pas utilisé (mets y 0)
enfin, pour animer ta Bar, tu lui envoies simplement le message PBM_STEPIT, sans paramètre (lParam et wParam à 0). ce message avance la Bar de l'incrément donné précédemment, et la redessine. si tu souhaites spécifier toi même l'avancement, alors tu envoies le message PBM_SETPOS avec en wParam la position, lParam à 0
 
voila ! bon courage
 
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-07-2006 à 23:16:19    

Waou ca parait tellement clair que j'arrive a faire des erreurs... La principale est que je ne sais pas comment déclarer iccs, j'pensais le déclarer avec la structure INITCOMMONCONTROLSEX mais le compilo le prend mal... après PBM_SMOOTH n'es pas déclarer et pour courouner le tout les erreurs que je déteste : plusieurs choses dans ce genre   [Linker error] undefined reference to `glColor3f@12'.
N'y a t'il a pas une directive de préprocesseur a inclure ?
 
Désolé de massacré une si belle explication :) MERCI.  

Reply

Marsh Posté le 05-07-2006 à 23:24:17    

Phaydrinix a écrit :

La principale est que je ne sais pas comment déclarer iccs, j'pensais le déclarer avec la structure INITCOMMONCONTROLSEX mais le compilo le prend mal


Code :
  1. INITCOMMONCONTROLSEX iccs;


 

Phaydrinix a écrit :


... après PBM_SMOOTH n'es pas déclarer


rajoute au début de ton programme  

Code :
  1. #include <commctrl.h>


 

Phaydrinix a écrit :


 et pour courouner le tout les erreurs que je déteste : plusieurs choses dans ce genre   [Linker error] undefined reference to `glColor3f@12'.
N'y a t'il a pas une directive de préprocesseur a inclure ?


si, tu dois inclure la librairie OpenGL32.lib dans les librairies avec lesquelles tu linkes ton projet


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-07-2006 à 23:44:08    

Oui, c'est mieu mais toujours pas ca :( :
 - INITCOMMONCONTROLSEX iccs; =`INITCOMMONCONTROLSEX' does not name a type.  
 - OpenGL32.lib rien de tel sur mon PC [même en .a ou .o] (j'utilise Dev-C++ :(  )
Voila, merci.

Reply

Marsh Posté le 05-07-2006 à 23:53:07    

tu trouveras ici des infos pour utiliser OpenGL avec Dev C++ :
http://www.dil.univ-mrs.fr/~garret [...] utres/OGL/
par contre, je te conseille plutot d'utiliser Code::Blocks au lieu de Devcpp, car ce dernier n'est plus maintenu et cb est bien meilleur
 
en ce qui concerne ton message sur INITCOMMONCONTROLSEX, ça serait bien que tu postes ton code stp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-07-2006 à 10:43:21    

Salut,
 
GEGNIAL code::Blocks ne signal pas de [Linker error] !! sinon pour INITCOMMONCONTROLSEX j'ai un peut tout essayé mais le compilo me dis toujours que ce n'est pas un nom de type... Voici :
 

Code :
  1. INITCOMMONCONTROLSEX iccs
  2. {
  3. iccs.dwSize = sizeof(INITCOMMONCONTROLSEX);
  4. iccs.dwICC  = ICC_PROGRESS_CLASS;
  5. InitCommonControls()
  6. };


 
Je le met en global...


Message édité par Phaydrinix le 06-07-2006 à 11:48:51
Reply

Marsh Posté le 06-07-2006 à 12:01:41    

mais tu me fais quoi là ? [:psychokwak]
INITCOMMONCONTROLSEX est une structure déjà déclarée, t'as pas besoin de la redéclarer ! en plus c'est absolument nawak ce que tu fais ! t'initialises les membres n'importe comment et le pompon, t'appelles InitCommonControls n'importe comment !
 

Code :
  1. INITCOMMONCONTROLSEX iccs;
  2. iccs.dwSize = sizeof(INITCOMMONCONTROLSEX);
  3. iccs.dwICC  = ICC_PROGRESS_CLASS;
  4. InitCommonControls(&iccs);


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-07-2006 à 12:28:55    

Heu...,j'avais déjà essayé ceci, et il y a 7 erreurs... Dont la principale : INITCOMMONCONTROLSEX n'est pas un nom de type.
Après il y a expected constructeur destructeur or type conversion before . token.
expected , or ; before . token
 ...


Message édité par Phaydrinix le 06-07-2006 à 12:42:35
Reply

Marsh Posté le 06-07-2006 à 13:40:46    

Inclure commctrl.h , ajouter comctl32.lib au projet ?

Reply

Marsh Posté le 06-07-2006 à 13:40:46   

Reply

Marsh Posté le 06-07-2006 à 19:50:06    

Heu, j'ai compiler le code source de quelqu'un qui a réussi a faire une progressbar et moi le compilo me di que INITCOMMONCONTROLSEX est non déclarer...

Reply

Marsh Posté le 06-07-2006 à 21:45:20    

bon, poste l'intégralité de tes sources ici, pasque là y'a un truc qui cloche


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-07-2006 à 00:22:07    

Heu avant de poster je veux juste dire (pou ma défence ^^) que je copi ici le code qui révèle le moins d'erreurs de compilation... (la dans ce code je trouve ça bizarre d'envoyer INITCOMMONCONTROLSEX et sa structure au programme... Mais bon...

Code :
  1. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.     switch (message)
  4.     {
  5.         case WM_DESTROY:
  6.             PostQuitMessage (0);
  7.             break;
  8.         default:
  9.             return DefWindowProc (hwnd, message, wParam, lParam);
  10.   case WM_INITDIALOG:
  11. {
  12.       INITCOMMONCONTROLSEX iccs;
  13.       iccs.dwSize = sizeof(INITCOMMONCONTROLSEX);
  14.       iccs.dwICC  = ICC_PROGRESS_CLASS;
  15.       InitCommonControls(&iccs);
  16. }
  17. case WM_CREATE:
  18. {
  19.     hProgress = CreateWindowEx(0,PROGRESS_CLASS,"", WS_CHILD | WS_VISIBLE | PBS_SMOOTH,
  20.    10, 10, 100, 20, hwnd, NULL, hThisInstance, NULL);
  21.      return true;
  22. }
  23.    SendMessage(hProgress, PBM_SETRANGE, 0, MAKELONG(0, 100));
  24.     }
  25.     return 0;
  26. }

 
Ce code peut être n'importe quoi... soyez gentil  :ange:

Reply

Marsh Posté le 07-07-2006 à 07:36:53    

syntax error : y'a pas d'accolade après les case !
2 eme erreur : tout ce qu'il y a dans le WM_INITDIALOG n'a rien à y faire. tu le vires, tu le colles dans le WinMain et tu mets dans le WM_INITDIALOG ce que je t'ai dit d'y mettre plus haut
3 eme erreur : je sais pas ou t'as vu que je t'ai dit de mettre la création de la Bar dans le WM_CREATE. ça se met dans le WM_INITDIALOG et le WM_CREATE n'a rien à faire là.
 
t'as un peu tendance à faire n'importe quoi hein !
 
pour ce qui est de INITCOMMONCONTROLSEX, elle est définie dans commctrl.h, donc si tu l'as inclus, je vois pas ce qui te choque


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-07-2006 à 10:20:39    

Tu sais que ce que j'écris n'est pas la pour décoré... Bon bref voici :
 
-`INITCOMMONCONTROLSEX' undeclared (first use this function)
-(Each undeclared identifier is reported only once for each function it appears in.)
-expected `;' before "iccs"
-`iccs' undeclared (first use this function)

Reply

Marsh Posté le 08-07-2006 à 13:25:52    

C'est tellement élémentaire que ça a été demandé et répondu des centaines de fois sur les newsgroups appropriés :
 
news://comp.os.ms-windows.programmer.win32
news://fr.comp.os.ms-windows.programmation

Reply

Marsh Posté le 08-07-2006 à 13:57:22    

Phaydrinix a écrit :

Tu sais que ce que j'écris n'est pas la pour décoré... Bon bref voici :
 
-`INITCOMMONCONTROLSEX' undeclared (first use this function)
-(Each undeclared identifier is reported only once for each function it appears in.)
-expected `;' before "iccs"
-`iccs' undeclared (first use this function)


non mais c'est moi qui te dis que ce que j'écris n'est pas là pour décorer [:mlc]
t'as lu mon post plus haut ? tu as encadré tes case xxx: avec des accolades, et ça c'est faux ! des case xxx: ne s'encadrent pas avec des accolades, faut pas t'étonner après si tu as les erreurs que tu mentionnes !
la syntaxe correcte est :

Code :
  1. switch (machin)
  2. {
  3.    case caca:
  4.        xxxx;
  5.        break;
  6.    case prout:
  7.       xxxx;
  8.       break;
  9.    default:
  10.       xxxx;
  11. }


si tu fais ça, je te fiche mon billet que t'auras plus de messages d'erreur


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-07-2006 à 14:19:45    

Ouais bon, c'est la dernière fois que je post ici.
++ et merci d'avoir quand même essayé...

Reply

Marsh Posté le 08-07-2006 à 15:19:44    

Phaydrinix a écrit :

Ouais bon, c'est la dernière fois que je post ici.
++ et merci d'avoir quand même essayé...


mais tu me reproches quoi là exactement ? [:mlc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-07-2006 à 15:39:50    

Harkonnen a écrit :

mais tu me reproches quoi là exactement ? [:mlc]


 
tu lui as pas filé le code qui marche :o
il en a rien a foutre de comprendre :o
t es nul :o
rentre chez ta mere :o
et vive les TT :o

Reply

Marsh Posté le 08-07-2006 à 15:54:13    

Euh, on a parfaitement le droit de mettre des {} dans les cases hein :o


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 08-07-2006 à 16:02:36    

sans doute mais moi j'en ai jamais vu [:pingouino]
en plus quand je compile son truc avec VS 2005 j'ai ça  

Citation :


Erreur 2 fatal error C1075: fin de fichier rencontrée avant que l'élément accolade '{' gauche de 'c:\documents and settings\harkonnen\mes documents\visual studio 2005\projects\pgbar\pgbar\pgbar.cpp(135)' soit équilibré c:\documents and settings\harkonnen\mes documents\visual studio 2005\projects\pgbar\pgbar\pgbar.cpp 193


si je vire les {} des case ça fonctionne, donc bon, y'a un truc qui cloche là [:god]
 
edit: et je précise que mes {} sont équilibrées hein ! à chaque accolade ouvrante correspond une fermante :o
(non mais on sait jamais, des fois que [:pingouino])


Message édité par Harkonnen le 08-07-2006 à 16:04:13

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-07-2006 à 16:05:17    

Y'aurait quand même pas une différence entre le C et le C++ de ce coté la quand même, ils auraient pas osé :/
 
( lis tes mp :o )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 08-07-2006 à 18:12:28    

Je ne reproche rien a personne, je voulais juste évité les messages comme ceux de miRROR vu que tout le monde commencai a s'énnerver... A cause de mon vieu blème


Message édité par Phaydrinix le 08-07-2006 à 18:12:59
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed