Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1129 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1401494
Phaydrinix
Posté le 05-07-2006 à 21:58:16  profilanswer
 

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.

mood
Publicité
Posté le 05-07-2006 à 21:58:16  profilanswer
 

n°1401519
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-07-2006 à 22:45:02  profilanswer
 

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)
n°1401575
Phaydrinix
Posté le 05-07-2006 à 23:16:19  profilanswer
 

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.  

n°1401587
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-07-2006 à 23:24:17  profilanswer
 

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)
n°1401602
Phaydrinix
Posté le 05-07-2006 à 23:44:08  profilanswer
 

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.

n°1401610
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-07-2006 à 23:53:07  profilanswer
 

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)
n°1401759
Phaydrinix
Posté le 06-07-2006 à 10:43:21  profilanswer
 

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
n°1401851
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-07-2006 à 12:01:41  profilanswer
 

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)
n°1401877
Phaydrinix
Posté le 06-07-2006 à 12:28:55  profilanswer
 

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
n°1401947
_darkalt3_
Proctopathe
Posté le 06-07-2006 à 13:40:46  profilanswer
 

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

mood
Publicité
Posté le 06-07-2006 à 13:40:46  profilanswer
 

n°1402277
Phaydrinix
Posté le 06-07-2006 à 19:50:06  profilanswer
 

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...

n°1402347
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-07-2006 à 21:45:20  profilanswer
 

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)
n°1402453
Phaydrinix
Posté le 07-07-2006 à 00:22:07  profilanswer
 

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:

n°1402495
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-07-2006 à 07:36:53  profilanswer
 

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)
n°1402565
Phaydrinix
Posté le 07-07-2006 à 10:20:39  profilanswer
 

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)

n°1402884
marctes
Posté le 08-07-2006 à 13:25:52  profilanswer
 

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

n°1402909
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-07-2006 à 13:57:22  profilanswer
 

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)
n°1402920
Phaydrinix
Posté le 08-07-2006 à 14:19:45  profilanswer
 

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

n°1402932
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-07-2006 à 15:19:44  profilanswer
 

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)
n°1402941
mIRROR
Chevreuillobolchévik
Posté le 08-07-2006 à 15:39:50  profilanswer
 

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

n°1402945
0x90
Posté le 08-07-2006 à 15:54:13  profilanswer
 

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.
n°1402949
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-07-2006 à 16:02:36  profilanswer
 

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)
n°1402951
0x90
Posté le 08-07-2006 à 16:05:17  profilanswer
 

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.
n°1402976
Phaydrinix
Posté le 08-07-2006 à 18:12:28  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[MYSQL] Probleme de creation de table[Access] Création de graphique
Creation DLL avec Visual C/C++ 6.0[CREATION] Système personalisé de session (PHP >= 4)
Win32, threads, messages et blocagesProbleme de creation de clip en as2
Creation de PDF à partir d'un rapport rdlcRésolu [XML JDOM] création de balise commentaire
[resolu]Création d'une baseVBA Excel - macro création de feuille
Plus de sujets relatifs à : [Win32, C++] Création d'une progressbar


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR