Création d'une progressbar [Win32, C++] - C++ - Programmation
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 :
|
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 :
|
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 :
|
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
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.
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 :
|
Phaydrinix a écrit : |
rajoute au début de ton programme
Code :
|
Phaydrinix a écrit : |
si, tu dois inclure la librairie OpenGL32.lib dans les librairies avec lesquelles tu linkes ton projet
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.
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
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 :
|
Je le met en global...
Marsh Posté le 06-07-2006 à 12:01:41
mais tu me fais quoi là ?
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 :
|
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
...
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...
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
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 :
|
Ce code peut être n'importe quoi... soyez gentil
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
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)
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
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 : |
non mais c'est moi qui te dis que ce que j'écris n'est pas là pour décorer
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 :
|
si tu fais ça, je te fiche mon billet que t'auras plus de messages d'erreur
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é...
Marsh Posté le 08-07-2006 à 15:19:44
Phaydrinix a écrit : Ouais bon, c'est la dernière fois que je post ici. |
mais tu me reproches quoi là exactement ?
Marsh Posté le 08-07-2006 à 15:39:50
Harkonnen a écrit : mais tu me reproches quoi là exactement ? |
tu lui as pas filé le code qui marche
il en a rien a foutre de comprendre
t es nul
rentre chez ta mere
et vive les TT
Marsh Posté le 08-07-2006 à 15:54:13
Euh, on a parfaitement le droit de mettre des {} dans les cases hein
Marsh Posté le 08-07-2006 à 16:02:36
sans doute mais moi j'en ai jamais vu
en plus quand je compile son truc avec VS 2005 j'ai ça
Citation : |
si je vire les {} des case ça fonctionne, donc bon, y'a un truc qui cloche là
edit: et je précise que mes {} sont équilibrées hein ! à chaque accolade ouvrante correspond une fermante
(non mais on sait jamais, des fois que )
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 )
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
Marsh Posté le 05-07-2006 à 21:58:16
Salut ,
J'aimerai mettre une progresse bar dans mon petit programme Win32, mais le problème est que je n'arrive pas a la faire 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.