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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.