CWnd::OnMeasureItem

L'infrastructure appelle cette fonction membre par l'infrastructure pour le propriétaire d'un bouton owner-draw, d'une zone de liste déroulante, d'une zone de liste, ou d'un élément de menu lorsque le contrôle est créé.

afx_msg void OnMeasureItem(
   int nIDCtl,
   LPMEASUREITEMSTRUCT lpMeasureItemStruct 
);

Paramètres

  • nIDCtl
    L'ID du contrôle.

  • lpMeasureItemStruct
    Pointe vers une structure de données de MEASUREITEMSTRUCT qui contient les dimensions du contrôle owner draw.

Notes

Remplacez cette fonction membre et remplissez la structure de données d' MEASUREITEMSTRUCT pointée pointe vers lpMeasureItemStruct et retournez ; cela indique à des fenêtres des dimensions du contrôle et permet aux fenêtres à l'intervention de l'utilisateur de processus avec le contrôle correctement.

Si une zone de liste ou une zone de liste déroulante est créée avec le style de LBS_OWNERDRAWVARIABLE ou de CBS_OWNERDRAWVARIABLE , l'infrastructure appelle cette fonction pour le propriétaire pour chaque élément du contrôle ; sinon cette fonction est appelée une fois.

Les fenêtres lance l'appel à OnMeasureItem pour le propriétaire des zones de liste déroulante et des zones de liste créés avec le style d' OWNERDRAWFIXED avant d'envoyer le message de WM_INITDIALOG .Par conséquent, lorsque le propriétaire reçoit cet appel, windows n'a pas encore déterminé la hauteur et la largeur de la police utilisée dans le contrôle ; les appels et les calculs de fonction nécessitant ces valeurs doivent se produire dans la fonction principale de l'application ou de la bibliothèque.

Si l'élément qui est mesuré est CMenu, CListBox objet ou d' CComboBox , la fonction virtuelle d' MeasureItem de la classe appropriée est appelée.Substituez la fonction membre d' MeasureItem de la classe appropriée du contrôle pour calculer et définir la taille de chaque élément.

OnMeasureItem est appelé uniquement si la classe du contrôle est créée au moment de l'exécution, ou elle est créée avec le style de LBS_OWNERDRAWVARIABLE ou de CBS_OWNERDRAWVARIABLE .Si le contrôle est créé par l'éditeur de boîtes de dialogue, OnMeasureItem ne sera pas appelé.Cela est dû au fait que le message de WM_MEASUREITEM est envoyé au début du processus de création du contrôle.Si vous sous-classe à l'aide de DDX_Control, d' SubclassDlgItem, ou d' SubclassWindow, le sous-classement se produit généralement lorsque le processus de création.Par conséquent, il n'y a aucun moyen de gérer le message de WM_MEASUREITEM dans la fonction d' OnChildNotify du contrôle, qui est le utilise MFC de mécanisme d'implémenter ON_WM_MEASUREITEM_REFLECT.

[!REMARQUE]

Cette fonction membre est appelée par l'infrastructure pour permettre à votre application de gérer un message de fenêtre.Les paramètres sont passés à la fonction reflètent les paramètres acceptés par l'infrastructure lorsque le message a été accepté.Si vous appelez l'implémentation de la classe de base de cette fonction, cette implémentation utilise les paramètres initialement passés avec le message et non les paramètres que vous fournissez à la fonction.

Configuration requise

Header: afxwin.h

Voir aussi

Référence

CWnd, classe

Graphique de la hiérarchie

CMenu::MeasureItem

CListBox::MeasureItem

CComboBox::MeasureItem

CComboBox::MeasureItem