À propos des contrôles statiques

Les applications utilisent souvent des contrôles statiques pour étiqueter d’autres contrôles ou 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 des fenêtres contextuelles et enfants qui se chevauchent, 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 puisse se comporter 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 abordé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 contrôle statique graphique simple affiche un cadre ou un rectangle rempli. Un cadre peut être dessiné dans un certain nombre de styles, inclus noir, gris ou blanc. En outre, un cadre peut être dessiné avec un style échassé pour lui donner une apparence tridimensionnelle. 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 textuel

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

  • aligné à gauche sans habillage de mot
  • aligné à gauche avec le retour à la ligne de mot
  • 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 de 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 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 plutôt que 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 lorsqu’elle crée le contrôle et spécifie également un handle à l’image bitmap, à l’icône ou au métafichier pour que le contrôle s’affiche. Une fois le contrôle créé, une application peut associer un autre graphique au contrôle en l’envoyant un message STM_SETIMAGE , en spécifiant un handle au nouvel objet graphique. Une application peut récupérer un handle vers l’objet graphique actuellement associé à un contrôle statique en l’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 assumer 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 de la classe de fenêtre de contrôle statique prédéfinie effectue le 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 tout 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 d’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 d’autres contrôles statiques.
WM_ENABLE Repaints 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 Repaint le contrôle.
WM_SETFONT Définit la police et les repaints pour les contrôles statiques de texte.
WM_SETTEXT Définit le texte et les repaints pour les contrôles statiques de texte.

 

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