Barre de Progression et Boite de Dialogue

Résolu
Signaler
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
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

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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;
}
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
1
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!
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
109
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
15 mai 2007
1
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