Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :



API Windows en C

12 - Les contrôles supplémentaires de Windows.

Par CGi

Le 5 juillet 2005




Introduction :

Windows permet d'utiliser des contrôles supplémentaires gérés par une bibliothèque dynamique appelée : "Common control library" (comctrl32.dll)
Nous allons commencer par le plus simple : la barre de progression. Vous connaissez la barre de progression, celle qui nous fait patienter le temps d'un traitement long.
Nous allons pour cet exemple créer une boîte de dialogue appelée directement depuis la fonction d'entrée WinMain. Elle comportera : une barre de progression et un bouton qui la fera avancer d'une unité à chaque appui.


Mise en oeuvre :

Les compilateurs de ressource ne connaissant pas ce contrôle nous utiliserons le type générique CONTROL pour la créer.

    CONTROL "", IDE_PB1, PROGRESS_CLASS, 0 ,10, 20, 140, 12

Il est suivi du texte, puis de son identificateur, puis du nom de sa classe de fenêtre, puis de son style, puis de sa position et de ses dimensions.
Ces contrôles pour être utilisé doivent s'assurer que comctrl32.dll est chargée. C'est le rôle de la fonction InitCommonControls :

       InitCommonControls();

Cette fonction doit être appelée une seule fois avant l'utilisation du contrôle.

La barre de progression :

L'utilisation de la barre de progression est très simple. Avant son utilisation, vous lui envoyez un message PBM_SETRANGE pour définir ses bornes :

         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETRANGE, 0, MAKELONG(0,10));

Celle-ci dans les mots de poids faible et de poids fort du paramètre lParam, reconstitué avec la macro MAKELONG.
Ensuite, Vous initialisez un pas de progression en lui envoyant un message PBM_SETSTEP :

         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETSTEP, 1, 0);

Le pas étant passé avec le paramètre wParam du message.
Enfin, vous la faite avancer d'un pas avec le message PBM_STEPIT :

         SendDlgItemMessage(hDlg, IDE_PB1, PBM_STEPIT, 0, 0);

Ce que nous ferons a chaque action du bouton.


Code complet :

resource.h :


#define IDE_PB1 101

resource.rc :

#include <windows.h>

#include "resource.h"

DIALOG1 DIALOG
   60, 60, 160, 80
          STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                                        CAPTION "ProgressBar"
BEGIN
    DEFPUSHBUTTON "Progress", IDOK, 56, 55, 42, 12
    CONTROL "", IDE_PB1, PROGRESS_CLASS, 0 ,10, 20, 140, 12
END

winmain.c :

#include <windows.h>
#include <commctrl.h>

#include "resource.h"

BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                  LPSTR lpCmdLine, int nCmdShow)
{
       InitCommonControls();
       DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)DlgProc);
       return 0;
}
/******************************************************************************/

BOOL APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
      case WM_INITDIALOG:
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETRANGE, 0, MAKELONG(0,10));
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETSTEP, 1, 0);
         return TRUE;

      case WM_COMMAND:
         if (LOWORD(wParam) == IDOK)
              {
                   SendDlgItemMessage(hDlg, IDE_PB1, PBM_STEPIT, 0, 0);
                   return TRUE;
              }
         if (LOWORD(wParam) == IDCANCEL)
              {
                   EndDialog(hDlg,0);
                   return TRUE;
              }
      default:
         return FALSE;
    }
}

Dans le document suivant : "Le contrôle barre d'état". Un contrôle de la "Common control library" sera créé sur la fenêtre principale.

J'ai testé les compilations avec C++ Builder et Dev-C++.
Le compilateur de ressources de Dev-C++ n'ayant pas accepté la constante PROGRESS_CLASS, j'ai du la remplacer par son véritable nom de classe de fenêtre.

    CONTROL "", IDE_PB1, "msctls_progress32", 0 ,10, 20, 140, 12

N'oubliez pas d'ajouter la librairie d'importation "libcomctl32.a" avec Dev-C++ (Load object files dans Project options).

A voir un autre exemple d'utilisation d'un contrôle de comctrl32.dll : La barre d'état.

A vos PC.

CGi



Sommaire



C/C++
  Les pointeurs du C/C++.   Les listes chaînées.             Liste simple.             Liste triée.             Liste double.   Les arbres.   Les tas.   Le C orienté objets ?

  1 - La fenêtre principale.   2 - Contrôles et messages.   3 - Les commandes.   4 - Dialogue std.   5 - Contexte de périph.   6 - Dessiner.   7 - Les ressources.   8 - Dialogue perso.   9 - Dialogue comm.   10 - Les accélérateurs.

Assembleur
  Assembleur sous Visual C++.

C++ BUILDER
  Trucs et astuces.   Composant.   TRichEdit.   TDrawGrid.   Application MDI.   TThread.   wxWidgets.   Style Win XP.

  Première application.   Construire un menu.   Dessiner.   Sisers, Timers...   Dialogues standards.   Dialogues perso.

DotNet
  Composant C# Builder.   Contrôle WinForm.   Application MDI.

Java
  Applet java.





Copyright 2002-2016 CGi - Tous droits réservés CGi. Toutes reproduction, utilisation ou diffusion de ce document par quelque moyen que ce soit autre que pour un usage personnel doit faire l'objet d'une autorisation écrite de la part de l'auteur, propriétaire des droits intellectuels.
Les codes sources de ce document sont fournis en l'état. L'utilisateur les utilise à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur. L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution des codes sources de ce document.
De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profits, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation des codes sources de ce document, quand bien même l'auteur aurait été averti de la possibilité de tels dommages. L'utilisation des codes sources de ce document vaut acceptation par l'utilisateur des termes de la licence ci-dessus.

Contacter le responsable de la rubrique C