À propos des contrôles statiques

Les applications utilisent souvent des contrôles statiques pour étiqueter d’autres contrôles ou pour séparer un groupe de contrôles. Bien que les contrôles statiques soient des fenêtres enfants, ils ne peuvent pas être sélectionnés. Par conséquent, ils ne peuvent pas recevoir le focus clavier et ne peuvent pas avoir d’interface clavier. Un contrôle statique qui a le style SS_NOTIFY reçoit l’entrée de la souris, en informant la fenêtre parente lorsque l’utilisateur clique ou double-clique sur le contrôle. Les contrôles statiques appartiennent à la classe de fenêtre STATIC.

Bien que les contrôles statiques puissent être utilisés dans les fenêtres enfants, contextuelles et superposées, ils sont conçus pour être utilisés dans les boîtes de dialogue, où le système normalise leur comportement. En utilisant des contrôles statiques en dehors des boîtes de dialogue, un développeur augmente le risque que l’application se comporte de manière non standard. En règle générale, un développeur utilise des contrôles statiques dans les boîtes de dialogue ou utilise le style SS_OWNERDRAW pour créer des contrôles statiques personnalisés.

Les rubriques suivantes sont traitées dans cette section.

Types de contrôles statiques

Il existe quatre types de contrôles statiques. Chaque type a un ou plusieurs styles de contrôle statiques.

Contrôle statique graphique simple

Un simple contrôle graphique statique affiche un cadre ou un rectangle rempli. Un cadre peut être dessiné dans un certain nombre de styles, notamment noir, gris ou blanc. En outre, un cadre peut être dessiné avec un style gravé pour lui donner une apparence en trois dimensions. Les styles de cadre incluent SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME, SS_ETCHEDHORZ, SS_ETCHEDVERT et SS_ETCHEDFRAME.

Un rectangle peut être rempli de couleur dans l’un des trois styles suivants : noir, gris ou blanc. Ces styles sont définis par les constantes SS_BLACKRECT, SS_GRAYRECT et SS_WHITERECT.

Les styles graphiques ne peuvent pas être combinés.

Contrôle statique de texte

Un contrôle statique de texte affiche le texte dans un rectangle dans l’un des cinq styles suivants :

  • alignés à gauche sans habillage du mot
  • aligné à gauche avec le retour à la ligne
  • centrée
  • alignée à droite
  • simple

Ces styles sont définis par les constantes SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT et SS_SIMPLE, respectivement. Le système réorganise le texte dans ces contrôles de manière prédéfinie, à l’exception du texte « simple », qui n’est pas réorganisé.

Une application peut modifier le texte d’un contrôle statique de texte à tout moment à l’aide de la fonction SetWindowText ou du message WM_SETTEXT .

Le système affiche autant de texte que possible dans le contrôle statique et extrait tout ce qui ne convient pas. Pour calculer une taille appropriée pour le contrôle, récupérez les métriques de police pour le texte. Pour plus d’informations sur les polices et les métriques de police, consultez Polices et texte.

Par défaut, le texte de fenêtre d’un contrôle statique, comme pour d’autres contrôles, peut contenir une esperluette qui définit le caractère suivant comme touche de raccourci pour le contrôle (ou, dans le cas de la plupart des contrôles statiques, pour le contrôle qu’il étiquette, qui est le contrôle suivant dans l’ordre de tabulation). Si vous souhaitez afficher des esperluette dans le texte au lieu de les utiliser pour définir des raccourcis, incluez le style SS_NOPREFIX.

Contrôle statique d’image

Un contrôle statique d’image peut afficher des bitmaps, des icônes (y compris des icônes animées) ou des métafichiers améliorés. Le type de graphique affiché par un contrôle statique particulier dépend du style du contrôle : SS_BITMAP, SS_ICON ou SS_ENHMETAFILE. Une application spécifie le style lors de la création du contrôle et spécifie également un handle pour l’image bitmap, l’icône ou le métafichier que le contrôle doit afficher. Une fois le contrôle créé, une application peut associer un autre graphique au contrôle en lui envoyant un message STM_SETIMAGE , en spécifiant un handle au nouvel objet graphique. Une application peut récupérer un handle pour l’objet graphique actuellement associé à un contrôle statique en lui envoyant un message STM_GETIMAGE . Une application envoie des messages à un contrôle statique à l’aide de la fonction SendDlgItemMessage .

contrôle statique Owner-Drawn

En utilisant le style SS_OWNERDRAW, une application peut prendre la responsabilité de peindre un contrôle statique. La fenêtre parente d’un contrôle statique dessiné par le propriétaire (son propriétaire) reçoit un message WM_DRAWITEM chaque fois que le contrôle statique doit être peint. Le message inclut un pointeur vers une structure DRAWITEMSTRUCT qui contient des informations que la fenêtre propriétaire utilise lors du dessin du contrôle.

Traitement des messages par défaut du contrôle statique

La procédure de fenêtre pour la classe de fenêtre de contrôle statique prédéfinie effectue un traitement par défaut pour tous les messages que la procédure de contrôle statique ne traite pas. Lorsque le contrôle statique retourne FALSE pour n’importe quel message, la procédure de fenêtre prédéfinie vérifie les messages et exécute l’action par défaut décrite dans le tableau suivant. Dans le tableau, un contrôle statique de texte est un contrôle statique avec le style SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT ou SS_SIMPLE.

Message Action par défaut
WM_CREATE Charge l’objet graphique et dimensionne la fenêtre à la taille de l’objet, pour les contrôles statiques graphiques. N’effectue aucune action pour les autres contrôles statiques.
WM_DESTROY Libère et détruit tout objet graphique, pour les contrôles statiques graphiques. N’effectue aucune action pour les autres contrôles statiques.
WM_ENABLE Repeints les contrôles statiques visibles.
WM_ERASEBKGND Retourne TRUE, indiquant que le contrôle efface l’arrière-plan.
WM_GETDLGCODE Retourne DLGC_STATIC.
WM_GETFONT Retourne un handle à la police pour les contrôles statiques de texte.
WM_GETTEXT Retourne le nombre de caractères copiés.
WM_GETTEXTLENGTH Retourne la longueur, en caractères, du texte d’un contrôle statique de texte.
WM_LBUTTONDBLCLK Envoie à la fenêtre parente un code de notification STN_DBLCLK si le style de contrôle est SS_NOTIFY.
WM_LBUTTONDOWN Envoie à la fenêtre parente un code de notification STN_CLICKED si le style de contrôle est SS_NOTIFY.
WM_NCLBUTTONDBLCLK Envoie à la fenêtre parente un code de notification STN_DBLCLK si le style de contrôle est SS_NOTIFY.
WM_NCLBUTTONDOWN Envoie à la fenêtre parente un code de notification STN_CLICKED si le style de contrôle est SS_NOTIFY.
WM_NCHITTEST Retourne HTCLIENT si le style de contrôle est SS_NOTIFY ; sinon, retourne HTTRANSPARENT.
WM_PAINT Repeint le contrôle.
WM_SETFONT Définit la police et les repeints pour les contrôles statiques de texte.
WM_SETTEXT Définit le texte et les repeints pour les contrôles statiques de texte.

 

La procédure de fenêtre prédéfinie transmet tous les autres messages à DefWindowProc pour traitement par défaut.