Barre de Progression et Boite de Dialogue

Résolu
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 - 13 sept. 2006 à 16:30
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 13 sept. 2006 à 18:34
Bonjour! Je désirerais créer une ProgressBar dans une boite de dialogue. Mais voilà, il ne me semble pas que cela soit possible de déclarer une barre de progression dans un fichier ressource. Donc est-ce que je me trompe? Si oui, lequel? Et si non, est-ce qu'il y a une possibilité? Faudrait-il la dessiner? Et si oui, comment dessiner dans une boite de dialog :S j'ai cherché par tous les moyens, je ne m'en sors pas... Quelqu'un aurait-il une idée? :o
Merci

5 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
13 sept. 2006 à 18:34
Regarde dans mon exemple, PROGRESS_CLASS est sans les guillemets. Avec les guillemets tu peux utiliser "msctls_progress32".
InitCommonControls() doit être placé de préférence au début du WinMain. Personnellement je fais:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE ......
HINSTANCE hCmLib= LoadLibrary("comctl32.dll");
//... lancement de la boite de dialogue etc...
FreeLibrary(hCmLib);
return 0;
}
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
13 sept. 2006 à 16:57
Salut,
Les éditeurs de ressources permettent bien de mettre une progressbar dans une boite de dialogue. Voici un extrait d'un fichier rc réalisé avec VC6:
IDD_DIALOG1 DIALOG DISCARDABLE  0, 0, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,129,7,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,129,24,50,14
    CONTROL         "Progress1",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,
                    39,51,111,14
END

Pas besoin non plus de la dessiner. CreateWindow() permet de la créer pendant le traitement du message WM_INITDIALOG:
CreateWindow(PROGRESS_CLASS, WS_CHILD .....
Il ne faut pas oublier d'initialiser la librairie des common controls en chargeant la dll comctl32.dll avec LoadLibrary() ou tout simplement en utilisant InitCommonControls(). Le fichier commctrl.h est à ajouter aux includes.
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
13 sept. 2006 à 17:02
Ok merci, j'ai réussi à avoir quelque chose d'affiché :D!
Mais maintenant, tu dis que je dios la créer avec CreateWindow, mais est-ce que je le fais avec CreateWindow, ou bien comme tu l'as mis plus haut avec le CONTROL?
Ou est-ce que je gère "tous les combiens j'affiche tant" par exemple, je sais pas si c'est explicite... Au pire, il n'y a cas me demander des explications
Merci beaucoup en tout cas!
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
13 sept. 2006 à 17:14
A toi de choisir. Soit utiliser le script de ressources, soit la créer avec CreateWindow(). Personnellement, je n'utilise que CreateWindow(). Pour gérer la progressbar, on envoie des messages avec SendMessage() à son HWND:
PBM_SETRANGE : pour définir les marges
PBM_SETPOS : pour modifier la position.
Tous les détails sont dans la MSDN.
0

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

Posez votre question
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
13 sept. 2006 à 17:52
Alors enfait, j'ai opté pour la 2ème solutions que tu m'as conseillé, c'est-à-dire, avec CreateWindow(), donc ca donne ca, dans la procédure de la boite de dialogue:
HWND progress_bar;
...
case WM_INITDIALOG:
      InitCommonControls();
      progress_bar = CreateWindow(
                 "PROGRESS_CLASS",
                 (LPSTR) NULL,
                  WS_CHILD|WS_VISIBLE,
                  0, 0, 385,25,
                  hDlg2,
                  (HMENU)ID_PROGRESS1, //id de la progresbar, déclaré en haut
                   hinstance2,
                   NULL);


     
      return FALSE;
...

Est-ce que ça ne devrait pas s'affichier en ayant mis ca? Ca ne s'affiche pas, je comprends pas pourquoi :S
Si tout devrais marché, quelle erreurs pourrait-il y avoir?
Merci d'avance
0
Rejoignez-nous