Windows-Controls: A-Boutons

Description

Bonjour,

En travaillant sur ma série d'articles graphiques "GDI±?: …", j'ai rapidement senti le besoin d'utiliser des commandes et des entrées interactives.

En se basant sur la documentation Windows MSDN ou sur les codes proposés dans le web, il n'est pas évident de "vite" programmer de tels éléments.

Voici le premier texte d'une autre "série" qui traite de l'utilisation de contrôles interactifs tels que bouton (button), curseur (trackbar), barre d'outils (toolbar), barre d'état (status bar), menu, zone de liste (Combo box), etc.
Sous Windows 10, avec Visual Studio Express 2015, j'ai essayé de simplifier au maximum la programmation.
Ce premier code proposé n'inclut que windows.h !

Boutons.cpp:

Voici la fonction CALLBACK Wpro(…) qui correspond à la WNDCLASS définie dans WINAPI WinMain(…). Elle traite quelques exemples de BUTTON:
const int CV=WS_CHILD|WS_VISIBLE, BCV=WS_BORDER|CV,
  BP=BCV|BS_DEFPUSHBUTTON,CVA=CV|BS_AUTORADIOBUTTON;
const char *mes[] {"CheckBox CB is unchecked","CheckBox CB is checked"};
const enum {IdB1=17,IdB2,IdCB,IdRd,IdGr,IdBl};
HWND edit;

LRESULT CALLBACK Wpro(HWND h,UINT m,WPARAM wP,LPARAM lP) {
  switch(m) {
  case WM_CREATE:
    edit=CreateWindow("EDIT",0,BCV,20,40,200,110,h,0,0,0);
    CreateWindow("BUTTON","B1",BP,240,40,60,20,h,(HMENU)IdB1,0,0);
    CreateWindow("BUTTON","B2",BP,240,65,60,20,h,(HMENU)IdB2,0,0);
    CreateWindow("BUTTON","CB",BCV|BS_CHECKBOX,240,90,60,20,h,(HMENU)IdCB,0,0);
    CreateWindow("BUTTON","Couleurs",CV|BS_GROUPBOX,320,40,80,110,h,0,0,0);
    CreateWindow("BUTTON","Red",CVA,330,70,60,20,h,(HMENU)IdRd,0,0);
    CreateWindow("BUTTON","Green",CVA,330,95,60,20,h,(HMENU)IdGr,0,0);
    CreateWindow("BUTTON","Blue",CVA,330,120,60,20,h,(HMENU)IdBl,0,0);
    return 0;
  case WM_COMMAND:
    switch(wP) {
    case IdB1: SetWindowText(edit,"Push button B1"); return 0;
    case IdB2: SetWindowText(edit,"Push button B2"); return 0;
    case IdCB: {int chk=!IsDlgButtonChecked(h,IdCB); // 0 ou 1
      CheckDlgButton(h,IdCB,chk); SetWindowText(edit,mes[chk]);} return 0;
    case IdRd: SetWindowText(edit,"Couleur rouge"); return 0;
    case IdGr: SetWindowText(edit,"Couleur verte"); return 0;
    case IdBl: SetWindowText(edit,"Couleur bleue"); return 0;
    } return 0;
  case WM_PAINT: {PAINTSTRUCT ps;
    HDC hdc=BeginPaint(h,&ps);
    SetBkMode(hdc,TRANSPARENT); // Texte transparent
    TextOut(hdc,8,8,"Controls: A-Boutons, par William VOIROL, Sept 2017",50);
    EndPaint(h,&ps);} return 0;
  case WM_CLOSE: DestroyWindow(h); return 0;
  case WM_DESTROY: PostQuitMessage(0); return 0;
  }
  return DefWindowProc(h,m,wP,lP);
} // ► msdn.microsoft.com/en-us/library/windows/desktop/bb775947(v=vs.85).aspx


La fonction WINAPI WinMain(…) est semblable à celle utilisée dans GDI±?: … et correspond au premier lien ci-dessous.

Quelques liens:
Windows: Using Window Classes
Windows: Button Types
Radio buttons and GroupBox

Bonne lecture …

Codes Sources

A voir également