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

II. Mise en œuvre▲
Les compilateurs de ressources ne connaissant pas ce contrôle nous utiliserons le type générique CONTROL pour le 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és 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.
III. 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 faites avancer d'un pas avec le message PBM_STEPIT :
SendDlgItemMessage
(
hDlg, IDE_PB1, PBM_STEPIT, 0
, 0
);
Ce que nous ferons à chaque action du bouton.
IV. 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 dû 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 bibliothèque d'importation "libcomctl32.a" avec Dev-C++ (Load object files dans Project options).
À voir un autre exemple d'utilisation d'un contrôle de comctrl32.dll : La barre d'état.
À vos PC.
CGi