IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La programmation de l'interface utilisateur

La programmation de l'interface utilisateur


précédentsommairesuivant

I-B. Les contrôles standard

I-B-1. Le contrôle Bouton

I-B-1-a. Les styles

Dans la colonne de gauche, la liste des constantes permettant de spécifier le type du bouton et dans celle de droite, la liste des constantes permettant de chosir la disposition texte du bouton.

Type du bouton Disposition
BS_PUSHBUTTON Position du texte par rapport au bouton
BS_DEFPUSHBUTTON BS_LEFTTEXT (BS_RIGHTBUTTON)
BS_CHECKBOX  
BS_AUTOCHECKBOX Alignement du texte
BS_RADIOBUTTON BS_LEFT
BS_AUTORADIOBUTTON BS_RIGHT
BS_3STATE BS_TOP
BS_AUTO3STATE BS_BOTTOM
BS_PUSHLIKE BS_CENTER
BS_GROUPBOX BS_VCENTER
BS_OWNERDRAW  


BS_PUSHBUTTON (bouton poussoir ou de commande) est le type par défaut. Le type BS_DEFPUSHBUTTON est en principe réservé au bouton par défaut (celui qui est activé lorsqu'on appuie sur ENTREE) d'une boîte de dialogue. Par défaut, ce bouton s'il est présent doit avoir l'ID IDOK. Mais on peut changer cela en envoyant à la fenêtre le message DM_SETDEFID qui permet d'utiliser une autre valeur (que l'on placera dans wParam) à la place de IDOK.

Un bouton automatique (BS_AUTOXXX) est en gros un bouton dont l'état change automatiquement chaque fois qu'on clique dessus.

Un BS_CHECKBOX et un BS_3STATE ont la même apparence (case à cocher) sauf qu'un BS_3STATE, en plus de pouvoir être coché (BST_CHECKED) ou décoché (BST_UNCHECKED), peut aussi être dans un état non assigné (BST_INDETERMINATE). Les cases à cocher sont généralement utilisées pour donner à l'utilisateur la possibilité de sélectionner une ou plusieurs options parmi un groupe d'options. A l'inverse les boutons radio sont généralement utilisés pour demander à l'utilisateur de faire un choix parmi un groupe d'options. Si cette convention est conforme à vos attentes, vous n'avez aucune raison d'utiliser les boutons de type BS_CHECKBOX, BS_3STATE ou BS_RADIOBUTTON à la place de BS_AUTOCHECKBOX, BS_AUTO3STATE ou BS_AUTORADIOBUTTON.

Pour être encore plus rationnel (et cela est même requis pour les auto radio buttons), il ne faut pas se contenter de placer les contrôles les uns à côté des autres à l'intérieur d'un rectangle assez net pour former un « vrai » groupe de contrôles. En plus de cela, le premier contrôle du groupe doit avoir le style WS_GROUP. Autrement dit, un contrôle possédant ce style commence un nouveau groupe. Généralement, on donne aussi le style WS_TABSTOP au premier contrôle de chaque groupe pour permettre à l'utilisateur de naviguer facilement entre les différents groupes à l'aide de la touche TAB et de passer d'un contrôle à un autre du même groupe en utilisant les touches fléchées du clavier. Du point de vue esthétique, il est coutume de placer un groupe d'options à l'intérieur d'un group box (BS_GROUPBOX) mais bien entendu, cela n'est point une règle.

Et enfin, BS_PUSHLIKE est un style qu'on peut donner aux « state-buttons » (BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, etc.) pour leur donner une apparence de push button.

I-B-1-b. Les fonctions

CheckDlgButton :

 
Sélectionnez
BOOL CheckDlgButton(HWND hwndParent, int nIDButton, UINT uCheck);

Cette fonction permet de modifier l'état d'une case à cocher ou d'un bouton radio. Les valeurs utilisables sont : BST_CHECKED (coché), BST_UNCHECKED (décoché) et BST_INDETERMINATE (non assigné).

CheckRadioButton :

 
Sélectionnez
BOOL CheckRadioButton(HWND hwndParent, int nIDFirstButton, int nIDLastButton, int nIDCheckButton);

Permet de sélectionner (cocher) un bouton radio tout en s'assurant qu'un et seul seulement parmi un groupe ne soit sélectionné (les autres seront tous décochés).

IsDlgButtonChecked :

 
Sélectionnez
UINT IsDlgButtonChecked(HWND hwndParent, int nIDButton);

Cette fonction ne retourne pas une valeur booléenne (!) mais l'état du bouton (qui doit être une case à cocher ou un bouton radio) c'est-à-dire coché, décoché ou non assigné.

I-B-1-c. Les messages

BM_CLICK : Ce message peut être envoyé à un bouton pour simuler un clic de la part de l'utilisateur. Il ne nécessite aucun paramètre (c'est-à-dire que vous laissez tout simplement wParam et lParam à zéro).

BM_SETCHECK : Modifie l'état d'une case à cocher ou d'un bouton radio. Utilise wParam comme unique paramètre, qui peut être BST_CHECKED, BST_UNCHECKED ou BST_INDETERMINATE (pour les boutons à 3 états uniquement). Macro équivalente :

 
Sélectionnez
void Button_SetCheck(HWND hwndCtl, int check);


BM_GETCHECK : Retourne l'état d'une case à cocher ou d'un bouton radio. Ne nécessite aucun paramètre. Macro équivalente :

 
Sélectionnez
int Button_GetCheck(HWND hwndCtl);


BM_SETSTATE : Modifie l'état d'un bouton poussoir. Utilise wParam comme unique paramètre. Mettez TRUE pour rendre le bouton enfoncé et FALSE pour le relâcher. Macro équivalente :

 
Sélectionnez
UINT Button_SetState(HWND hwndCtl, int state);


BM_GETSTATE : Retourne l'état d'un bouton. Attention ! Ce n'est pas « l'inverse » du message BM_SETSTATE. BM_GETSTATE peut être utilisé avec n'importe quel bouton. Il ne nécessite aucun paramètre. Et enfin, il retourne une combinaison des valeurs suivantes :

  • BST_CHECKED : le bouton est coché
  • BST_UNCHECKED : le bouton est décoché
  • BST_INDETERMINATE : le bouton est non assigné
  • BST_FOCUS : le bouton a le focus clavier
  • BST_PUSHED : le bouton est maintenu enfoncé

Ces valeurs sont toutes indépendantes donc on peut utiliser l'opérateur & pour extraire les informations utiles. Par exemple :

 
Sélectionnez
int state = (int)SendDlgItemMessage(hWnd, MYBUTTON, BM_GETSTATE, 0, 0);
if (state & BST_CHECKED) {
    ...
}

La Macro équivalente est :

 
Sélectionnez
int Button_GetState(HWND hwndCtl);


BM_SETIMAGE : Associe une nouvelle image (une icône ou un bitmap) à un bouton. Le bouton doit avoir le style BS_ICON pour pouvoir afficher une icône et BS_BITMAP pour pouvoir afficher une image bitmap (sachez également que le style BS_TEXT permet à un bouton d'afficher du texte mais ce style est appliqué par défaut). Avec les boutons « normaux » on ne peut qu'afficher soit du texte soit une image. Pour pouvoir afficher à la fois du texte et une image (et faire d'autres trucs jusqu'ici impossibles), il faudra utiliser des boutons personnalisés (Owner Draw Buttons) que nous verrons encore plus loin. Ce message requiert en paramètres le type de l'image qu'on veut associer au bouton (wParam) qui peut prendre les valeurs IMAGE_ICON ou IMAGE_BITMAP et le handle de l'image en question (lParam). En retour, on a le handle de l'ancienne image associée au bouton (ou NULL).

BM_GETIMAGE : Retourne le handle de l'image associée au bouton ou NULL si aucune image ne lui a été associée. Nécessite en paramètre (wParam) le type de l'image (IMAGE_ICON ou IMAGE_BITMAP).

I-B-1-d. Les notifications

BN_CLICKED : Envoyé lorsque le bouton a été cliqué

BN_DBLCLK : Envoyé lorsque le bouton a été double cliqué. Seuls les boutons radio et les boutons personnalisés savent envoyer automatiquement cette notification. Pour les autres types de bouton, il faut qu'ils aient le style BS_NOTIFY.

I-B-2. Le contrôle Edit

I-B-2-a. Les styles

Format

ES_LOWERCASE / ES_UPPERCASE : Convertit automatiquement en minuscules / majuscules tous les caractères entrés.

ES_NUMBER : Le texte tapé ne doit comporter que des chiffres.

ES_ PASSWORD : Affiche des * à la place des caractères entrés. Utilisé pour saisir un mot de passe.

ES_LEFT / ES_RIGHT / ES_TEXT : Permet de choisir l'alignement du texte.

Comportement

ES_MULTILINE : Spécifie un contrôle multi lignes. Par défaut un contrôle Edit n'est constitué que d'une seule ligne.

ES_WANTRETURN : Par défaut, l'appui sur la touche ENTREE provoque l'activation du bouton par défaut si celui-ci est bien sûr présent. Pour spécifier que l'appui sur la touche ENTREE doit provoquer le saut à la ligne suivante et non l'activation du bouton par défaut, il faut spécifier le style ES_WANTRETURN.

WS_HSCROLL / WS_VSCROLL : En fait, ces styles ne sont pas spécifiques des contrôles Edit mais communs à toutes les fenêtres. Ils permettent d'indiquer si la fenêtre comporte oui ou non une barre de défilement horizontale/verticale. Ces barres lorsqu'elles sont présentes sont automatiquement prises en charge par le contrôle Edit alors qu'il faut en général soi-même les gérer pour les autres classes de fenêtre.

ES_AUTOHSCROLL : Active la saisie « kilométrique » c'est-à-dire permet à l'utilisateur de continuer la saisie sur la même ligne même quand la largeur du texte dépasse la largeur du contrôle.

ES_AUTOVSCROLL : Fait défiler automatiquement le texte vers le haut quand l'utilisateur tape ENTREE à la dernière ligne.

ES_READONLY : Spécifie un contrôle en lecture seule, c'est-à-dire que le contrôle peut afficher du texte mais l'utilisateur ne pourra pas le modifier.

I-B-2-b. Les messages

WM_COPY : Copie la sélection courante vers le presse-papiers. Ne nécessite aucun paramètre.

WM_CUT : Coupe la sélection courante et place le texte ainsi coupé dans le presse-papiers. Ne nécessite aucun paramètre

WM_PASTE : Copie si possible le contenu du presse-papiers à partir de la position courante dans le contrôle. Ne nécessite aucun paramètre.

WM_CLEAR : Efface la sélection courante. Ne nécessite aucun paramètre.

EM_CANUNDO : Retourne l'état du flag « Can Undo » indiquant s'il est possible d'annuler la dernière action (TRUE) ou non (FALSE). Ce message ne nécessite aucun paramètre. Macro équivalente :

 
Sélectionnez
BOOL Edit_CanUndo(HWND hwndCtl);


EM_UNDO : Annule, si possible, la dernière action effectuée. Ne nécessite aucun paramètre. Macro équivalente :

 
Sélectionnez
BOOL Edit_Undo(HWND hwndCtl);


EM_LIMITTEXT : Ou EM_SETLIMITTEXT. Limite le nombre maximum de caractères que l'utilisateur peut entrer à un nombre passé en paramètre (wParam). On peut mettre 0 pour limiter ce nombre au maximum supporté par le système.

EM_GETLIMITTEXT : Retourne le nombre maximum de caractères que l'utilisateur peut entrer. Ne nécessite aucun paramètre.

EM_SETPASSWORDCHAR : Spécifie le caractère à utiliser pour masquer les mots de passe (par défaut : '*'). Le seul paramètre requis est le caractère de remplacement (wParam). Macro équivalente :

 
Sélectionnez
void Edit_SetPasswordChar(HWND hwndCtl, UINT ch);


EM_GETPASSWORDCHAR : Retourne le caractère actuellement utilisé pour masquer les mots de passe. Macro équivalente :

 
Sélectionnez
TCHAR Edit_GetPasswordChar(HWND hwndCtl);


EM_GETLINECOUNT : Retourne le nombre actuel de lignes d'un contrôle multi lignes. Ce nombre est toujours supérieur ou égal à 1, même si le contrôle est vide (auquel cas la valeur retournée est 1, comme s'il y avait une ligne). Macro équivalente :

 
Sélectionnez
int Edit_GetLineCount(HWND hwndCtl);


EM_LINELENGTH : Retourne la longueur c'est-à-dire le nombre de caractères d'une ligne. Ce message ne nécessite qu'un seul paramètre (wParam) à savoir de numéro de la ligne que l'on veut interroger. Le numéro de la première ligne est 0. Macro équivalente :

 
Sélectionnez
int Edit_LineLength(HWND hwndCtl, int line);


EM_GETLINE : Copie le contenu d'une ligne dans un buffer. Il faut placer le numéro de la ligne à copier dans le paramètre wParam et l'adresse du buffer destiné à recevoir les caractères copiés dans lParam. Il faut également placer la taille du buffer dans le premier mot (WORD) de ce buffer. Le caractère de fin de chaîne n'est pas ajouté. En retour, on a le nombre de caractères copiés.

En général, on envoie donc dans un premier temps le message EM_LINELENGTH avant d'envoyer le message EM_GETLINE, comme montré dans l'extrait de code suivant :

 
Sélectionnez
size_t len = (size_t)SendMessage(hEdit, EM_LINELENGTH, (WPARAM)iLine, 0);

TCHAR * lpBuffer = malloc( max(len + 1, sizeof(WORD)) * sizeof(TCHAR) );

if (lpBuffer != NULL)
{
    memcpy(lpBuffer, &len, sizeof(WORD));
    SendMessage(hEdit, EM_GETLINE, (WPARAM)iLine, (LPARAM)lpBuffer);
    lpBuffer[len] = '\0';
    
    MessageBox(hWnd, lpBuffer, "", MB_OK);
    
    free(lpBuffer);
}

La Macro équivalente est :

 
Sélectionnez
int Edit_GetLine(HWND hwndCtl, int line, LPTSTR lpBuffer, WORD wBufLength);


Bien entendu on peut toujours utiliser GetWindowText pour récupérer tout le texte d'un contrôle Edit comme avec n'importe quelle fenêtre. GetWindowTextLength permet de connaître le nombre de caractères constituant le texte d'une fenêtre.

Mais il ya tout de même un problème. En fait, GetWindowText n'est pas trop recommandé pour récupérer le contenu d'un contrôle multi lignes puisque cette opération peut consommer beaucoup de mémoire. Pour avoir accès à tout le contenu, il vaut mieux accéder directement à la mémoire utilisée par le contrôle lui-même. C'est là qu'entre en jeu le message EM_GETHANDLE.

EM_GETHANDLE : Retourne le handle de la mémoire utilisée par un contrôle multi lignes (en effet son utilisation avec les contrôles à une seule ligne présente peu d'intérêt). Ce handle, passé à LocalLock, permet d'obtenir ensuite un pointeur vers cette mémoire, qui est un tableau de caractères (ANSI ou UNICODE selon le jeu de caractères que vous utilisez) terminé par zéro. Le programme peut lire le contenu de cette mémoire mais ne peut pas la modifier. Pour déverrouiller le contrôle, on appellera la fonction LocalUnlock. Par exemple :

 
Sélectionnez
HLOCAL hMemory = (HLOCAL)SendMessage(hEdit, EM_GETHANDLE, 0, 0);

TCHAR * pMemory = LocalLock(hMemory);

MessageBox(hWnd, pMemory, "", MB_OK);

LocalUnlock(hMemory);

La Macro équivalente est :

 
Sélectionnez
HLOCAL Edit_GetHandle(HWND hwndCtl);


EM_GETSEL : Permet de récupérer le début et la fin de la sélection courante. Nécessite en paramètres les adresses respectives de la variable destinée à recevoir l'indice du début de la sélection (wParam) et de celle destinée à recevoir l'indice de la fin de sélection (lParam). La fin de la sélection n'est pas le dernier caractère sélectionné mais le caractère suivant.

EM_SETSEL : Modifie la sélection courante. Ce message nécessite en paramètres les indices respectifs du début (wParam) et de la fin (lParam) de la nouvelle sélection. Utilisez respectivement 0 et -1 pour tout sélectionner.

EM_REPLACESEL : Remplace le texte de la sélection courante par un autre (lParam). Il faut également spécifier (wParam) si l'action peut être annulé (TRUE) ou non (FALSE).

EM_GETMODIFY : Retourne l'état du flag « Modified » indiquant si le contenu a été modifié depuis la dernière fois qu'on l'a marqué comme sain et sauf. TRUE indique que le contenu a été modifié. Macro équivalente :

 
Sélectionnez
BOOL Edit_GetModify(HWND hwndCtl);


EM_SETMODIFY : Permet de modifier l'état du flag « Modified » du contrôle. Mettre FALSE (wParam) pour indiquer que le contenu est sain et sauf. Macro équivalente :

 
Sélectionnez
void Edit_SetModify(HWND hwndCtl, UINT fModified);

I-B-2-c. Les notifications

EN_UPDATE : Envoyé chaque fois que l'utilisateur modifie le contenu du contrôle. Cette notification est envoyée avant que la modification ne prenne effet.

EN_CHANGE : Envoyé chaque fois que l'utilisateur modifie le contenu du contrôle. Cette notification est envoyée après que la modification ait pris effet.

EN_MAXTEXT : Envoyé lorsque l'utilisateur a tenté d'entrer plus de texte que le contrôle ne peut supporter.

EN_SETFOCUS : Envoyé lorsque le contrôle reçoit le focus du clavier.

EN_KILLFOCUS : Envoyé lorsque le contrôle vient de perdre le focus du clavier.

I-B-3. Le contrôle Static

Certainement un des plus simples. Par contre les styles sont très nombreux mais nous ne les détaillerons pas tous, MSDN est là pour ça. Le contrôle étiquette est la plupart du temps utilisé pour afficher du texte (les styles SS_LEFT, SS_RIGHT et SS_CENTER permettent de spécifier l'alignement) mais sachez qu'il peut également afficher une image (une icône ou un bitmap). Pour cela il suffit de spécifier le style SS_ICON ou SS_BITMAP selon le type d'image qu'on veut afficher puis envoyer le message STM_SETIMAGE pour spécifier l'image à afficher. A part ça, ce contrôle n'envoie des notifications (SN_CLICKED, SN_DBLCLK, etc.) que si le style SS_NOTIFY est spécifié. En général on n'a pas besoin des notifications venant de ce contrôle.

I-B-4. Le contrôle Zone de liste (ListBox)

I-B-4-a. Les styles

LBS_DISABLENOSCROLL : Spécifie que la barre de défilement du contrôle doit toujours être visible. Par défaut, cette barre n'apparaît que lorsque le contrôle contient trop d'éléments pour être tous affichés en même temps.

LBS_EXTENDEDSEL : Spécifie que l'utilisateur peut sélectionner plusieurs éléments en même temps à l'aide de la souris et les touches SHIFT ou CTRL ou à l'aide d'une combinaison spéciale de touches.

LBS_MULTIPLESEL : Spécifie que l'utilisateur peut sélectionner plusieurs éléments en même temps en cliquant successivement sur les éléments à sélectionner. La sélection / désélection d'un élément se fait à l'aide d'un simple clic.

LBS_NOSEL : Spécifie que les éléments de la liste peuvent être uniquement visualisés et non sélectionnés.

LBS_SORT : Spécifie que les éléments de la liste doivent être triés alphabétiquement.

LBS_NOTIFY : Autorise le contrôle à envoyer des notifications (LBN_CLICKED, LBN_DBLCLK, etc.).

LBS_STANDARD : Zone de liste standard (inclut les styles les plus courants, à savoir WS_BORDER, LBS_SORT et LBS_NOTIFY).

I-B-4-b. Les messages

LB_ADDSTRING : Ajoute une chaîne (lParam) à la fin de la liste. Macro équivalente :

 
Sélectionnez
int ListBox_AddString(HWND hwndCtl, LPCTSTR lpszString);


LB_INSERTSTRING : Insère une chaîne (lParam) à la position numéro n (wParam) sachant que l'indice du premier élément est 0. Si wParam = -1, la chaîne sera ajoutée à la fin. Macro équivalente :

 
Sélectionnez
int ListBox_InsertString(HWND hwndCtl, int index, LPCTSTR lpszString);


LB_DELETESTRING : Supprime une chaîne de la liste. Le seul paramètre requis est l'indice de la chaîne à supprimer (wParam). Macro équivalente :

 
Sélectionnez
int ListBox_AddString(HWND hwndCtl, int index);


LB_GETCOUNT : Retourne le nombre d'éléments dans la liste. Macro équivalente :

 
Sélectionnez
int ListBox_GetCount(HWND hwndCtl);


LB_GETTEXTLEN : Retourne la longueur (strlen) du texte de l'élément spécifié (wParam). Macro équivalente :

 
Sélectionnez
int ListBox_GetTextLen(hwndCtl, int index);


LB_GETTEXT : Copie le texte de l'élément spécifié (wParam) pour le placer dans un buffer (lParam). Ce buffer doit être suffisamment grand pour contenir le texte copié ainsi que le caractère de fin de chaîne (qui est automatiquement ajouté). Macro équivalente :

 
Sélectionnez
int ListBox_GetTextLen(hwndCtl, int index, LPTSTR lpszBuffer);


LB_FINDSTRING : Recherche une chaîne (lParam) à partir de la position spécifiée (wParam), plus précisément à partir de la position suivante. Donc pour chercher depuis le début de la liste (position 0), il faut passer -1 en paramètre. En fait, LB_FINDSTRING cherche une chaîne contenant le préfixe placé dans lParam et non la chaîne exacte. Pour chercher la chaîne exacte, il faut utiliser LB_FINDSTRINGEXACT à la place de LB_FINDSTRING. Dans tous les cas, la recherche ne tient pas compte de la casse et la valeur retournée est l'indice du premier élément trouvé ou LB_ERR si aucun élément n'a été trouvé. Macro équivalente :

 
Sélectionnez
int ListBox_FindString(HWND hwndCtl, int indexStart, LPCTSTR lpszString);


LB_SETITEMDATA : Associe une valeur (lParam) à un élément de la liste (wParam). Macro équivalente :

 
Sélectionnez
int ListBox_SetItemData(HWND hwndCtl, int index, LPARAM data);


LB_GETITEMDATA : Retourne la valeur associée à un élément de la liste (wParam). Macro équivalente :

 
Sélectionnez
LRESULT ListBox_SetItemData(HWND hwndCtl, int index);


LB_GETSEL : Retourne l'état d'un élément de la liste (wParam). Une valeur positive indique que l'élément est sélectionné et 0 indique qu'il est désélectionné. LB_ERR est retourné en cas d'erreur. Macro équivalente :

 
Sélectionnez
int ListBox_GetSel(HWND hwndCtl, int index);


LB_SETSEL : Modifie l'état (wParam) d'un élément de la liste (lParam). Utilisez TRUE pour sélectionner l'élément et FALSE pour le désélectionner. Si lParam = -1, la modification sera appliquée à tous les éléments de la liste. Macro équivalente :

 
Sélectionnez
int ListBox_GetSel(HWND hwndCtl, BOOL fSelect, int index);


LB_GETCURSEL : Dans un contrôle à sélection simple, retourne l'indice de la sélection courante ou LB_ERR si aucun élément n'est sélectionné. Macro équivalente :

 
Sélectionnez
int ListBox_GetCurSel(HWND hwndCtl);


LB_SETCURSEL : Sélectionne un élément (wParam). Macro équivalente :

 
Sélectionnez
int ListBox_GetCurSel(HWND hwndCtl, int index);


LB_GETSELCOUNT : Dans un contrôle à sélection multiple, retourne le nombre d'éléments sélectionnés, 0 si aucun élément n'est sélectionné. Macro équivalente :

 
Sélectionnez
int ListBox_GetSelCount(HWND hwndCtl);


LB_GETSELITEMS : Permet de récupérer dans un tableau (lParam) d'entiers les indices des éléments sélectionnés. On devra également placer dans wParam le nombre maximum d'éléments que peut accepter le tableau. Macro équivalente :

 
Sélectionnez
int ListBox_GetSelItems(HWND hwndCtl, int cItems, int * lpItems)


LB_RESETCONTENT : Réinitialise la liste (supprime tous les éléments). Macro équivalente :

 
Sélectionnez
BOOL ListBox_ResetContent(HWND hwndCtl);

I-B-5. Le contrôle Zone de liste combinée (ComboBox)

Le contrôle ComboBox combine les contrôles Edit et ListBox bien qu'il n'implémente pas forcément toutes leurs fonctionnalités. Le style CBS_SIMPLE affiche en permanence le contrôle ListBox alors qu'avec le style CBS_DROPDOWN ce dernier n'apparaît que lorsque l'utilisateur déroule la liste. Avec le style CBS_DROPDOWNLIST, l'utilisateur ne peut plus saisir directement du texte dans le contrôle Edit mais doit choisir un élément dans la liste. Les messages LB_GETTEXT et LB_GETTEXTLEN ont été traduits en CB_GETLBTEXT et CB_GETLBTEXTLEN (et non en CB_GETTEXT et CB_GETTEXTLEN auxquels on aurait pu s'attendre) et les noms de macros commencent tous par ComboBox (ComboBox_AddString, ComboBox_GetCursel, ComboBox_GetLBText, ComboBox_GetLBTextLen, etc.). De même, beaucoup des styles des contrôles Edit et ListBox n'ont plus été retenus, en particulier le style CBS_NOTIFY qui n'existe plus car n'étant plus nécessaire étant donné que ce contrôle émet abondamment des notifications dont voici une liste non exhaustive :

CBN_DROPDOWN : La zone de liste est sur le point d'être déroulée (envoyé par ceux qui ont le style CBS_DROPDOWN ou CBS_DROPDOWNLIST uniquement).

CBN_DBLCLK : Un élément de la zone de liste a été double-cliqué.

CBN_CLOSEUP : La zone de liste est sur le point d'être repliée (envoyé par ceux qui ont le style CBS_DROPDOWN ou CBS_DROPDOWNLIST uniquement).

CBN_SELCHANGE : La sélection dans zone de la liste vient de changer.

CBN_SELENDCANCEL : L'utilisateur a quitté le contrôle sans valider la sélection.

CBN_SELENDOK : L'utilisateur a bien fermé la zone de liste, indiquant qu'il a validé son choix.

CBN_EDITCHANGE : L'utilisateur a modifié le texte du contrôle Edit du ComboBox.

CBN_EDITUPDATE : L'utilisateur tente de modifier le texte du contrôle Edit du ComboBox.

CBN_KILLFOCUS : Le contrôle a perdu le focus du clavier.


précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Melem. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.