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 :
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 :
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 :
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 :
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 :
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 :
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 :
int
state =
(
int
)SendDlgItemMessage
(
hWnd, MYBUTTON, BM_GETSTATE, 0
, 0
);
if
(
state &
BST_CHECKED) {
...
}
La Macro équivalente est :
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 :
BOOL Edit_CanUndo
(
HWND hwndCtl);
EM_UNDO : Annule, si possible, la dernière action effectuée. Ne nécessite aucun paramètre. Macro équivalente :
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 :
void
Edit_SetPasswordChar
(
HWND hwndCtl, UINT ch);
EM_GETPASSWORDCHAR : Retourne le caractère actuellement utilisé pour masquer les
mots de passe. Macro équivalente :
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 :
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 :
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 :
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 :
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 :
HLOCAL hMemory =
(
HLOCAL)SendMessage
(
hEdit, EM_GETHANDLE, 0
, 0
);
TCHAR *
pMemory =
LocalLock
(
hMemory);
MessageBox
(
hWnd, pMemory, ""
, MB_OK);
LocalUnlock
(
hMemory);
La Macro équivalente est :
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 :
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 :
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 :
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 :
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 :
int
ListBox_AddString
(
HWND hwndCtl, int
index);
LB_GETCOUNT : Retourne le nombre d'éléments dans la liste. Macro équivalente :
int
ListBox_GetCount
(
HWND hwndCtl);
LB_GETTEXTLEN : Retourne la longueur (strlen) du texte de l'élément spécifié (wParam). Macro équivalente :
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 :
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 :
int
ListBox_FindString
(
HWND hwndCtl, int
indexStart, LPCTSTR lpszString);
LB_SETITEMDATA : Associe une valeur (lParam) à un élément de la liste (wParam). Macro équivalente :
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 :
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 :
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 :
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 :
int
ListBox_GetCurSel
(
HWND hwndCtl);
LB_SETCURSEL : Sélectionne un élément (wParam). Macro équivalente :
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 :
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 :
int
ListBox_GetSelItems
(
HWND hwndCtl, int
cItems, int
*
lpItems)
LB_RESETCONTENT : Réinitialise la liste (supprime tous les éléments). Macro équivalente :
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.