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
|