Share via


CHeaderCtrl, classe

Fournit les fonctionnalités du contrôle commun d'en-tête Windows.

Syntaxe

class CHeaderCtrl : public CWnd

Membres

Constructeurs publics

Nom Description
CHeaderCtrl ::CHeaderCtrl Construit un objet CHeaderCtrl.

Méthodes publiques

Nom Description
CHeaderCtrl ::ClearAllFilters Efface tous les filtres d’un contrôle d’en-tête.
CHeaderCtrl ::ClearFilter Efface le filtre d’un contrôle d’en-tête.
CHeaderCtrl ::Create Crée un contrôle d’en-tête et l’attache à un CHeaderCtrl objet.
CHeaderCtrl ::CreateDragImage Crée une version transparente de l’image d’un élément dans un contrôle d’en-tête.
CHeaderCtrl ::CreateEx Crée un contrôle d’en-tête avec les styles étendus Windows spécifiés et l’attache à un CListCtrl objet.
CHeaderCtrl ::D eleteItem Supprime un élément d’un contrôle d’en-tête.
CHeaderCtrl ::D rawItem Dessine l’élément spécifié d’un contrôle d’en-tête.
CHeaderCtrl ::EditFilter Commence à modifier le filtre spécifié d’un contrôle d’en-tête.
CHeaderCtrl ::GetBitmapMargin Récupère la largeur de la marge d’une bitmap dans un contrôle d’en-tête.
CHeaderCtrl ::GetFocusedItem Obtient l’identificateur de l’élément dans le contrôle d’en-tête actuel qui a le focus.
CHeaderCtrl ::GetImageList Récupère le handle d’une liste d’images utilisée pour dessiner des éléments d’en-tête dans un contrôle d’en-tête.
CHeaderCtrl ::GetItem Récupère des informations sur un élément dans un contrôle d’en-tête.
CHeaderCtrl ::GetItemCount Récupère un nombre d’éléments dans un contrôle d’en-tête.
CHeaderCtrl ::GetItemDropDownRect Obtient les informations de rectangle englobant pour le bouton déroulant spécifié dans un contrôle d’en-tête.
CHeaderCtrl ::GetItemRect Récupère le rectangle englobant d’un élément donné dans un contrôle d’en-tête.
CHeaderCtrl ::GetOrderArray Récupère l’ordre de gauche à droite des éléments dans un contrôle d’en-tête.
CHeaderCtrl ::GetOverflowRect Obtient le rectangle englobant du bouton de dépassement de capacité pour le contrôle d’en-tête actuel.
CHeaderCtrl ::HitTest Détermine l’élément d’en-tête, le cas échéant, situé à un point spécifié.
CHeaderCtrl ::InsertItem Insère un nouvel élément dans un contrôle d’en-tête.
CHeaderCtrl ::Layout Récupère la taille et la position d’un contrôle d’en-tête dans un rectangle donné.
CHeaderCtrl ::OrderToIndex Récupère la valeur d’index d’un élément en fonction de son ordre dans le contrôle d’en-tête.
CHeaderCtrl ::SetBitmapMargin Définit la largeur de la marge d’une bitmap dans un contrôle d’en-tête.
CHeaderCtrl ::SetFilterChangeTimeout Définit l’intervalle de délai d’expiration entre le moment où une modification a lieu dans les attributs de filtre et la publication d’une HDN_FILTERCHANGE notification.
CHeaderCtrl ::SetFocusedItem Définit le focus sur un élément d’en-tête spécifié dans le contrôle d’en-tête actuel.
CHeaderCtrl ::SetHotDivider Modifie le séparateur entre les éléments d’en-tête pour indiquer un glisser-déplacer manuel d’un élément d’en-tête.
CHeaderCtrl ::SetImageList Affecte une liste d’images à un contrôle d’en-tête.
CHeaderCtrl ::SetItem Définit les attributs de l’élément spécifié dans un contrôle d’en-tête.
CHeaderCtrl ::SetOrderArray Définit l’ordre de gauche à droite des éléments dans un contrôle d’en-tête.

Notes

Un contrôle d’en-tête est une fenêtre qui est généralement positionnée au-dessus d’un ensemble de colonnes de texte ou de nombres. Il contient un titre pour chaque colonne et peut être divisé en parties. L’utilisateur peut faire glisser les séparateurs qui séparent les parties pour définir la largeur de chaque colonne. Pour obtenir une illustration d’un contrôle d’en-tête, consultez Contrôles d’en-tête.

Ce contrôle (et par conséquent la CHeaderCtrl classe) est disponible uniquement pour les programmes qui s’exécutent sous Windows 95/98 et Windows NT version 3.51 et ultérieure.

Les fonctionnalités ajoutées pour les contrôles courants Windows 95/Internet Explorer 4.0 incluent les éléments suivants :

  • Classement personnalisé de l’élément d’en-tête.

  • Glisser-déplacer des éléments d’en-tête pour réorganiser les éléments d’en-tête. Utilisez le style HDS_DRAGDROP lorsque vous créez l’objet CHeaderCtrl .

  • Texte de colonne d’en-tête constamment visible pendant le redimensionnement des colonnes. Utilisez le style HDS_FULLDRAG lorsque vous créez un CHeaderCtrl objet.

  • Le suivi à chaud de l’en-tête, qui met en surbrillance l’élément d’en-tête lorsque le pointeur pointe dessus. Utilisez le style HDS_HOTTRACK lorsque vous créez l’objet CHeaderCtrl .

  • Prise en charge de la liste d’images. Les éléments d’en-tête peuvent contenir des images stockées dans un objet ou un CImageList texte.

Pour plus d’informations sur l’utilisation CHeaderCtrl, consultez Contrôles et utilisation de CHeaderCtrl.

Hiérarchie d'héritage

CObject

CCmdTarget

CWnd

CHeaderCtrl

Spécifications

En-tête : afxcmn.h

CHeaderCtrl ::CHeaderCtrl

Construit un objet CHeaderCtrl.

CHeaderCtrl();

Exemple

// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;

// Declare a dynamic CHeaderCtrl object.
CHeaderCtrl *pmyHeaderCtrl = new CHeaderCtrl;

CHeaderCtrl ::ClearAllFilters

Efface tous les filtres d’un contrôle d’en-tête.

BOOL ClearAllFilters();

Valeur de retour

TRUE si cette méthode réussit ; sinon, FALSE.

Notes

Cette méthode implémente le comportement du message Win32 HDM_CLEARFILTER avec une valeur de colonne de -1, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl ::ClearFilter

Efface le filtre d’un contrôle d’en-tête.

BOOL ClearFilter(int nColumn);

Paramètres

nColumn
Valeur de colonne indiquant le filtre à effacer.

Valeur de retour

TRUE si cette méthode réussit ; sinon, FALSE.

Notes

Cette méthode implémente le comportement du message Win32 HDM_CLEARFILTER, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl ::Create

Crée un contrôle d’en-tête et l’attache à un CHeaderCtrl objet.

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Paramètres

dwStyle
Spécifie le style du contrôle d’en-tête. Pour obtenir une description des styles de contrôle d’en-tête, consultez Styles de contrôle d’en-tête dans le Kit de développement logiciel (SDK) Windows.

Rect
Spécifie la taille et la position du contrôle d’en-tête. Il peut s’agir d’un objet CRect ou d’une structure RECT .

pParentWnd
Spécifie la fenêtre parente du contrôle d’en-tête, généralement un CDialog. Elle ne doit pas être NULL.

nID
Spécifie l’ID du contrôle d’en-tête.

Valeur de retour

Différent de zéro si l’initialisation a réussi ; sinon zéro.

Notes

Vous construisez un CHeaderCtrl objet en deux étapes. Tout d’abord, appelez le constructeur, puis appelez Create, ce qui crée le contrôle d’en-tête et l’attache à l’objet CHeaderCtrl .

En plus des styles de contrôle d’en-tête, vous pouvez utiliser les styles de contrôle courants suivants pour déterminer comment le contrôle d’en-tête positionne et se redimensionne (voir Styles de contrôle communs pour plus d’informations) :

  • CCS_BOTTOM Fait en sorte que le contrôle se positionne en bas de la zone cliente de la fenêtre parente et définit la largeur de la fenêtre parente comme la largeur de la fenêtre parente.

  • CCS_NODIVIDER Empêche qu’une mise en surbrillance à deux pixels soit dessinée en haut du contrôle.

  • CCS_NOMOVEY Permet au contrôle de redimensionner et de se déplacer horizontalement, mais pas verticalement, en réponse à un message WM_SIZE. Si le style CCS_NORESIZE est utilisé, ce style ne s’applique pas. Les contrôles d’en-tête ont ce style par défaut.

  • CCS_NOPARENTALIGN Empêche le contrôle de se déplacer automatiquement vers le haut ou le bas de la fenêtre parente. Au lieu de cela, le contrôle conserve sa position dans la fenêtre parente malgré les modifications apportées à la taille de la fenêtre parente. Si le style CCS_TOP ou CCS_BOTTOM est également utilisé, la hauteur est ajustée à la valeur par défaut, mais la position et la largeur restent inchangées.

  • CCS_NORESIZE Empêche le contrôle d’utiliser la largeur et la hauteur par défaut lors de la définition de sa taille initiale ou d’une nouvelle taille. Au lieu de cela, le contrôle utilise la largeur et la hauteur spécifiées dans la demande de création ou de dimensionnement.

  • CCS_TOP Provoque la position du contrôle en haut de la zone cliente de la fenêtre parente et définit la largeur de la fenêtre parente comme la largeur de la fenêtre parente.

Vous pouvez également appliquer les styles de fenêtre suivants à un contrôle d’en-tête (voir Styles de fenêtre pour plus d’informations) :

  • WS_CHILD Crée une fenêtre enfant. Impossible d’utiliser le style WS_POPUP.

  • WS_VISIBLE Crée une fenêtre qui est initialement visible.

  • WS_DISABLED Crée une fenêtre initialement désactivée.

  • WS_GROUP Spécifie le premier contrôle d’un groupe de contrôles dans lequel l’utilisateur peut passer d’un contrôle à l’autre avec les touches de direction. Tous les contrôles définis avec le style WS_GROUP après le premier contrôle appartiennent au même groupe. Le contrôle suivant avec le style WS_GROUP met fin au groupe de styles et démarre le groupe suivant (autrement dit, un groupe se termine à l’endroit où commence le suivant).

  • WS_TABSTOP Spécifie l’un des contrôles à travers lesquels l’utilisateur peut se déplacer à l’aide de la touche TAB. La touche TAB déplace l’utilisateur vers le contrôle suivant spécifié par le style WS_TABSTOP.

Si vous souhaitez utiliser des styles windows étendus avec votre contrôle, appelez CreateEx au lieu de Create.

Exemple

// pParentWnd is a pointer to the parent window.
m_myHeaderCtrl.Create(WS_CHILD | WS_VISIBLE | HDS_HORZ,
                      CRect(10, 10, 600, 50), pParentWnd, 1);

CHeaderCtrl ::CreateEx

Crée un contrôle (fenêtre enfant) et l’associe à l’objet CHeaderCtrl .

virtual BOOL CreateEx(
    DWORD dwExStyle,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Paramètres

dwExStyle
Spécifie le style étendu du contrôle en cours de création. Pour obtenir la liste des styles Windows étendus, consultez le paramètre dwExStyle pour CreateWindowEx dans le Kit de développement logiciel (SDK) Windows.

dwStyle
Style du contrôle d’en-tête. Pour obtenir une description des styles de contrôle d’en-tête, consultez Styles de contrôle d’en-tête dans le Kit de développement logiciel (SDK) Windows. Consultez Créer pour obtenir la liste des styles supplémentaires.

Rect
Référence à une structure RECT décrivant la taille et la position de la fenêtre à créer, dans les coordonnées clientes de pParentWnd.

pParentWnd
Pointeur vers la fenêtre qui est le parent du contrôle.

nID
ID de la fenêtre enfant du contrôle.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Utilisez CreateEx plutôt que d’appliquer Create des styles Windows étendus, spécifiés par le préface de style étendu Windows WS_EX_.

CHeaderCtrl ::CreateDragImage

Crée une version transparente de l’image d’un élément dans un contrôle d’en-tête.

CImageList* CreateDragImage(int nIndex);

Paramètres

nIndex
Index de base zéro de l’élément dans le contrôle d’en-tête. L’image affectée à cet élément est la base de l’image transparente.

Valeur de retour

Pointeur vers un objet CImageList en cas de réussite ; sinon NULL. La liste retournée ne contient qu’une seule image.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_CREATPEPT AGIMAGE, comme décrit dans le Kit de développement logiciel (SDK) Windows. Il est fourni pour prendre en charge le glisser-déplacer de l’élément d’en-tête.

Objet CImageList vers lequel le pointeur retourné pointe est un objet temporaire et est supprimé dans le traitement au moment d’inactivité suivant.

CHeaderCtrl ::D eleteItem

Supprime un élément d’un contrôle d’en-tête.

BOOL DeleteItem(int nPos);

Paramètres

Osbl
Spécifie l’index de base zéro de l’élément à supprimer.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Exemple

int nCount = m_myHeaderCtrl.GetItemCount();

// Delete all of the items.
for (int i = 0; i < nCount; i++)
{
   m_myHeaderCtrl.DeleteItem(0);
}

CHeaderCtrl ::D rawItem

Appelé par l’infrastructure lorsqu’un aspect visuel d’un contrôle d’en-tête propriétaire-dessin change.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Paramètres

lpDrawItemStruct
Pointeur vers une structure DRAWITEMSTRUCT décrivant l’élément à peindre.

Notes

Le itemAction membre de la DRAWITEMSTRUCT structure définit l’action de dessin à effectuer.

Par défaut, cette fonction membre ne fait rien. Remplacez cette fonction membre pour implémenter le dessin pour un objet de dessin CHeaderCtrl propriétaire.

L’application doit restaurer tous les objets GDI (Graphics Device Interface) sélectionnés pour le contexte d’affichage fourni dans lpDrawItemStruct avant que cette fonction membre ne se termine.

Exemple

// NOTE: CMyHeaderCtrl is a class derived from CHeaderCtrl.
// The CMyHeaderCtrl object was created as follows:
//
//   CMyHeaderCtrl m_myHeader;
//   myHeader.Create(WS_CHILD | WS_VISIBLE | HDS_HORZ,
//      CRect(10, 10, 600, 50), pParentWnd, 1);

// This example implements the DrawItem method for a
// CHeaderCtrl-derived class that draws every item as a
// 3D button using the text color red.
void CMyHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   // This code only works with header controls.
   ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER);

   HDITEM hdi;
   const int c_cchBuffer = 256;
   TCHAR lpBuffer[c_cchBuffer];

   hdi.mask = HDI_TEXT;
   hdi.pszText = lpBuffer;
   hdi.cchTextMax = c_cchBuffer;

   GetItem(lpDrawItemStruct->itemID, &hdi);

   // Draw the button frame.
   ::DrawFrameControl(lpDrawItemStruct->hDC,
                      &lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);

   // Draw the items text using the text color red.
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC,
                                        RGB(255, 0, 0));
   ::DrawText(lpDrawItemStruct->hDC, lpBuffer,
              (int)_tcsnlen(lpBuffer, c_cchBuffer),
              &lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}

CHeaderCtrl ::EditFilter

Commence à modifier le filtre spécifié d’un contrôle d’en-tête.

BOOL EditFilter(
    int nColumn,
    BOOL bDiscardChanges);

Paramètres

nColumn
Colonne à modifier.

bDis carte Changes
Valeur qui spécifie comment gérer les modifications d’édition de l’utilisateur si l’utilisateur est en train de modifier le filtre lorsque le message HDM_EDITFILTER est envoyé.

Spécifiez TRUE pour dis carte les modifications apportées par l’utilisateur ou FALSE pour accepter les modifications apportées par l’utilisateur.

Valeur de retour

TRUE si cette méthode réussit ; sinon, FALSE.

Notes

Cette méthode implémente le comportement du message Win32 HDM_EDITFILTER, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

int iFilter = m_myHeaderCtrl.EditFilter(1, TRUE);

CHeaderCtrl ::GetBitmapMargin

Récupère la largeur de la marge d’une bitmap dans un contrôle d’en-tête.

int GetBitmapMargin() const;

Valeur de retour

Largeur de la marge bitmap en pixels.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_GETo ITMAPMARGIN, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl ::GetFocusedItem

Obtient l’index de l’élément qui a le focus dans le contrôle d’en-tête actuel.

int GetFocusedItem() const;

Valeur de retour

Index de base zéro de l’élément d’en-tête qui a le focus.

Notes

Cette méthode envoie le message HDM_GETFOCUSEDITEM , qui est décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

Le premier exemple de code définit la variable, m_headerCtrlutilisée pour accéder au contrôle d’en-tête actuel. Cette variable est utilisée dans l'exemple suivant.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

L’exemple de code suivant illustre les méthodes et GetFocusedItem les SetFocusedItem méthodes. Dans une section antérieure du code, nous avons créé un contrôle d’en-tête avec cinq colonnes. Toutefois, vous pouvez faire glisser un séparateur de colonne afin que la colonne ne soit pas visible. L’exemple suivant définit puis confirme le dernier en-tête de colonne comme élément de focus.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXSetfocuseditem()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Check that we get the value we set.
   int item = m_headerCtrl.GetItemCount() - 1;
   m_headerCtrl.SetFocusedItem(item);
   int itemGet = m_headerCtrl.GetFocusedItem();
   CString str = _T("Set: focused item = %d\nGet: focused item = %d");
   str.Format(str, item, itemGet);
   MessageBox(str, _T("Set/GetFocused Item"));
}

CHeaderCtrl ::GetImageList

Récupère le handle d’une liste d’images utilisée pour dessiner des éléments d’en-tête dans un contrôle d’en-tête.

CImageList* GetImageList() const;

Valeur de retour

Pointeur vers un objet CImageList .

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_GETIMAGELIST, comme décrit dans le Kit de développement logiciel (SDK) Windows. Objet CImageList vers lequel le pointeur retourné pointe est un objet temporaire et est supprimé dans le traitement au moment d’inactivité suivant.

Exemple

// The new image list of the header control.
m_HeaderImages.Create(16, 16, ILC_COLOR, 2, 2);
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3));

ASSERT(m_myHeaderCtrl.GetImageList() == NULL);

m_myHeaderCtrl.SetImageList(&m_HeaderImages);
ASSERT(m_myHeaderCtrl.GetImageList() == &m_HeaderImages);

CHeaderCtrl ::GetItem

Récupère des informations sur un élément de contrôle d’en-tête.

BOOL GetItem(
    int nPos,
    HDITEM* pHeaderItem) const;

Paramètres

Osbl
Spécifie l’index de base zéro de l’élément à récupérer.

pHeaderItem
Pointeur vers une structure HDITEM qui reçoit le nouvel élément. Cette structure est utilisée avec les fonctions membres et SetItem les InsertItem fonctions membres. Tous les indicateurs définis dans l’élément mask garantissent que les valeurs des éléments correspondants sont correctement renseignées lors du retour. Si l’élément mask est défini sur zéro, les valeurs des autres éléments de structure sont sans signification.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Exemple

LPCTSTR lpszmyString = _T("column 2");
LPCTSTR lpszmyString2 = _T("vertical 2");

// Find the item whose text matches lpszmyString, and
// replace it with lpszmyString2.
int i, nCount = m_myHeaderCtrl.GetItemCount();
HDITEM hdi;
enum
{
   sizeOfBuffer = 256
};
TCHAR lpBuffer[sizeOfBuffer];
bool fFound = false;

hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = sizeOfBuffer;

for (i = 0; !fFound && (i < nCount); i++)
{
   m_myHeaderCtrl.GetItem(i, &hdi);

   if (_tcsncmp(hdi.pszText, lpszmyString, sizeOfBuffer) == 0)
   {
      _tcscpy_s(hdi.pszText, sizeOfBuffer, lpszmyString2);
      m_myHeaderCtrl.SetItem(i, &hdi);
      fFound = true;
   }
}

CHeaderCtrl ::GetItemCount

Récupère un nombre d’éléments dans un contrôle d’en-tête.

int GetItemCount() const;

Valeur de retour

Nombre d’éléments de contrôle d’en-tête en cas de réussite ; sinon - 1.

Exemple

Consultez l’exemple de CHeaderCtrl ::D eleteItem.

CHeaderCtrl ::GetItemDropDownRect

Obtient le rectangle englobant du bouton déroulant d’un élément d’en-tête dans le contrôle d’en-tête actuel.

BOOL GetItemDropDownRect(
    int iItem,
    LPRECT lpRect) const;

Paramètres

iItem
[in] Index de base zéro d’un élément d’en-tête dont le style est HDF_SPLITo UTTON. Pour plus d’informations, consultez le fmt membre de la structure HDITEM .

lpRect
[out] Pointeur vers une structure RECT pour recevoir les informations de rectangle englobant.

Valeur de retour

TRUE si cette fonction réussit ; sinon, FALSE.

Notes

Cette méthode envoie le message HDM_GETITEMDROPDOWNRECT , qui est décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

Le premier exemple de code définit la variable, m_headerCtrlutilisée pour accéder au contrôle d’en-tête actuel. Cette variable est utilisée dans l'exemple suivant.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

L’exemple de code suivant illustre la GetItemDropDownRect méthode. Dans une section antérieure du code, nous avons créé un contrôle d’en-tête avec cinq colonnes. L’exemple de code suivant dessine un rectangle 3D autour de l’emplacement sur la première colonne réservée au bouton déroulant d’en-tête.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXGetitemdropdownrect()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Get the dropdown rect for the first column.
   CRect rect;
   BOOL bRetVal = m_headerCtrl.GetItemDropDownRect(0, &rect);
   if (bRetVal == TRUE)
   {
      // Draw around the dropdown rect a rectangle that has red
      // left and top sides, and blue right and bottom sides.
      CDC *pDC = m_headerCtrl.GetDC();
      pDC->Draw3dRect(rect, RGB(255, 0, 0), RGB(0, 0, 255));
   }
}

CHeaderCtrl ::GetItemRect

Récupère le rectangle englobant d’un élément donné dans un contrôle d’en-tête.

BOOL GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Paramètres

nIndex
Index de base zéro de l’élément de contrôle d’en-tête.

lpRect
Pointeur vers l’adresse d’une structure RECT qui reçoit les informations de rectangle englobant.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Cette méthode implémente le comportement du message Win32 HDM_GETITEMRECT, comme décrit dans le Kit de développement logiciel (SDK) Windows.

CHeaderCtrl ::GetOrderArray

Récupère l’ordre de gauche à droite des éléments dans un contrôle d’en-tête.

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

Paramètres

piArray
Pointeur vers l’adresse d’une mémoire tampon qui reçoit les valeurs d’index des éléments dans le contrôle d’en-tête, dans l’ordre dans lequel ils apparaissent de gauche à droite.

iCount
Nombre d’éléments de contrôle d’en-tête. Doit être non négatif.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_GETORDERARRAY, comme décrit dans le Kit de développement logiciel (SDK) Windows. Il est fourni pour prendre en charge l’ordre des éléments d’en-tête.

Exemple

// Reverse the order of the items in the header control.
// (i.e. make the first item the last one, the last item
// the first one, and so on ...).
int nCount = m_myHeaderCtrl.GetItemCount();
LPINT pnOrder = (LPINT)malloc(nCount * sizeof(int));
ASSERT(pnOrder != NULL);
if (NULL != pnOrder)
{
   m_myHeaderCtrl.GetOrderArray(pnOrder, nCount);

   int i, j, nTemp;
   for (i = 0, j = nCount - 1; i < j; i++, j--)
   {
      nTemp = pnOrder[i];
      pnOrder[i] = pnOrder[j];
      pnOrder[j] = nTemp;
   }

   m_myHeaderCtrl.SetOrderArray(nCount, pnOrder);
   free(pnOrder);
}

CHeaderCtrl ::GetOverflowRect

Obtient le rectangle englobant du bouton de dépassement de capacité du contrôle d’en-tête actuel.

BOOL GetOverflowRect(LPRECT lpRect) const;

Paramètres

lpRect
[out] Pointeur vers une structure RECT qui reçoit les informations de rectangle englobant.

Valeur de retour

TRUE si cette fonction réussit ; sinon, FALSE.

Notes

Si le contrôle d’en-tête contient plus d’éléments que ce qui peut être affiché simultanément, le contrôle peut afficher un bouton de dépassement de capacité qui fait défiler vers des éléments qui ne sont pas visibles. Le contrôle d’en-tête doit avoir les styles HDS_OVERFLOW et HDF_SPLITo UTTON pour afficher le bouton de dépassement de capacité. Le rectangle englobant entoure le bouton de dépassement et existe uniquement lorsque le bouton de dépassement est affiché. Pour plus d’informations, consultez Styles de contrôle d’en-tête.

Cette méthode envoie le message HDM_GETOVERFLOWRECT , qui est décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

Le premier exemple de code définit la variable, m_headerCtrlutilisée pour accéder au contrôle d’en-tête actuel. Cette variable est utilisée dans l'exemple suivant.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

L’exemple de code suivant illustre la GetOverflowRect méthode. Dans une section antérieure du code, nous avons créé un contrôle d’en-tête avec cinq colonnes. Toutefois, vous pouvez faire glisser un séparateur de colonne afin que la colonne ne soit pas visible. Si certaines colonnes ne sont pas visibles, le contrôle d’en-tête dessine un bouton de dépassement de capacité. L’exemple de code suivant dessine un rectangle 3D autour de l’emplacement du bouton de dépassement de capacité.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXGetoverflowrect()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }
   CRect rect;
   // Get the overflow rectangle.
   BOOL bRetVal = m_headerCtrl.GetOverflowRect(&rect);
   // Get the device context.
   CDC *pDC = m_headerCtrl.GetDC();
   // Draw around the overflow rect a rectangle that has red
   // left and top sides, and green right and bottom sides.
   pDC->Draw3dRect(rect, RGB(255, 0, 0), RGB(0, 255, 0));
}

CHeaderCtrl ::HitTest

Détermine l’élément d’en-tête, le cas échéant, situé à un point spécifié.

int HitTest(LPHDHITTESTINFO* phdhti);

Paramètres

phdhti
[in, out] Pointeur vers une structure HDHITTESTINFO qui spécifie le point à tester et reçoit les résultats du test.

Valeur de retour

Index de base zéro de l’élément d’en-tête, le cas échéant, à la position spécifiée ; sinon, -1.

Notes

Cette méthode envoie le message HDM_HITTEST , qui est décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

Le premier exemple de code définit la variable, m_headerCtrlutilisée pour accéder au contrôle d’en-tête actuel. Cette variable est utilisée dans l'exemple suivant.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

L’exemple de code suivant illustre la HitTest méthode. Dans une section antérieure de cet exemple de code, nous avons créé un contrôle d’en-tête avec cinq colonnes. Toutefois, vous pouvez faire glisser un séparateur de colonne afin que la colonne ne soit pas visible. Cet exemple signale l’index de la colonne s’il est visible et -1 si la colonne n’est pas visible.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXHittest()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }
   // Initialize HDHITTESTINFO structure.
   HDHITTESTINFO hdHitIfo;
   memset(&hdHitIfo, 0, sizeof(HDHITTESTINFO));

   CString str;
   CRect rect;
   int iRetVal = -1;
   for (int i = 0; i < m_headerCtrl.GetItemCount(); i++)
   {
      m_headerCtrl.GetItemRect(i, &rect);
      hdHitIfo.pt = rect.CenterPoint();
      // The hit test depends on whether the header item is visible.
      iRetVal = m_headerCtrl.HitTest(&hdHitIfo);
      str.AppendFormat(_T("Item = %d, Hit item = %d\n"), i, iRetVal);
   }
   MessageBox(str, _T("Hit test results"));
}

CHeaderCtrl ::InsertItem

Insère un nouvel élément dans un contrôle d’en-tête à l’index spécifié.

int InsertItem(
    int nPos,
    HDITEM* phdi);

Paramètres

Osbl
Index de base zéro de l'élément à insérer. Si la valeur est égale à zéro, l’élément est inséré au début du contrôle d’en-tête. Si la valeur est supérieure à la valeur maximale, l’élément est inséré à la fin du contrôle d’en-tête.

phdi
Pointeur vers une structure HDITEM qui contient des informations sur l’élément à insérer.

Valeur de retour

Index du nouvel élément en cas de réussite ; sinon - 1.

Exemple

CString str;
HDITEM hdi;

hdi.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT | HDI_IMAGE;
hdi.cxy = 100; // Make all columns 100 pixels wide.
hdi.fmt = HDF_STRING | HDF_CENTER;

// Insert 6 columns in the header control.
for (int i = 0; i < 6; i++)
{
   str.Format(TEXT("column %d"), i);
   hdi.pszText = str.GetBuffer(0);
   hdi.iImage = i % 3;

   m_myHeaderCtrl.InsertItem(i, &hdi);
}

CHeaderCtrl ::Layout

Récupère la taille et la position d’un contrôle d’en-tête dans un rectangle donné.

BOOL Layout(HDLAYOUT* pHeaderLayout);

Paramètres

pHeaderLayout
Pointeur vers une structure HDLAYOUT , qui contient des informations utilisées pour définir la taille et la position d’un contrôle d’en-tête.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Cette fonction est utilisée pour déterminer les dimensions appropriées pour un nouveau contrôle d’en-tête qui doit occuper le rectangle donné.

Exemple

HDLAYOUT hdl;
WINDOWPOS wpos;
RECT rc;

// Reposition the header control so that it is placed at
// the top of its parent window's client area.
m_myHeaderCtrl.GetParent()->GetClientRect(&rc);

hdl.prc = &rc;
hdl.pwpos = &wpos;
if (m_myHeaderCtrl.Layout(&hdl))
{
   m_myHeaderCtrl.SetWindowPos(
       CWnd::FromHandle(wpos.hwndInsertAfter),
       wpos.x,
       wpos.y,
       wpos.cx,
       wpos.cy,
       wpos.flags | SWP_SHOWWINDOW);
}

CHeaderCtrl ::OrderToIndex

Récupère la valeur d’index d’un élément en fonction de son ordre dans le contrôle d’en-tête.

int OrderToIndex(int nOrder) const;

Paramètres

nOrder
Ordre de base zéro que l’élément apparaît dans le contrôle d’en-tête, de gauche à droite.

Valeur de retour

Index de l’élément, en fonction de son ordre dans le contrôle d’en-tête. L’index compte de gauche à droite, en commençant par 0.

Notes

Cette fonction membre implémente le comportement de la macro Win32 HDM_ORDERTOINDEX, comme décrit dans le Kit de développement logiciel (SDK) Windows. Il est fourni pour prendre en charge l’ordre des éléments d’en-tête.

CHeaderCtrl ::SetBitmapMargin

Définit la largeur de la marge d’une bitmap dans un contrôle d’en-tête.

int SetBitmapMargin(int nWidth);

Paramètres

nWidth
Largeur, spécifiée en pixels, de la marge qui entoure une bitmap au sein d’un contrôle d’en-tête existant.

Valeur de retour

Largeur de la marge bitmap en pixels.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_SETo ITMAPMARGIN, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl ::SetFilterChangeTimeout

Définit l’intervalle de délai d’expiration entre le moment où une modification a lieu dans les attributs de filtre et la publication d’une notification HDN_FILTERCHANGE .

int SetFilterChangeTimeout(DWORD dwTimeOut);

Paramètres

dwTimeOut
Valeur de délai d’expiration, en millisecondes.

Valeur de retour

Index du contrôle de filtre en cours de modification.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_SETFILTERCHANGETIMEOUT, comme décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl ::SetFocusedItem

Définit le focus sur un élément d’en-tête spécifié dans le contrôle d’en-tête actuel.

BOOL SetFocusedItem(int iItem);

Paramètres

iItem
[in] Index de base zéro d’un élément d’en-tête.

Valeur de retour

TRUE si cette méthode réussit ; sinon, FALSE.

Notes

Cette méthode envoie le message HDM_SETFOCUSEDITEM , qui est décrit dans le Kit de développement logiciel (SDK) Windows.

Exemple

Le premier exemple de code définit la variable, m_headerCtrlutilisée pour accéder au contrôle d’en-tête actuel. Cette variable est utilisée dans l'exemple suivant.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

L’exemple de code suivant illustre les méthodes et GetFocusedItem les SetFocusedItem méthodes. Dans une section antérieure du code, nous avons créé un contrôle d’en-tête avec cinq colonnes. Toutefois, vous pouvez faire glisser un séparateur de colonne afin que la colonne ne soit pas visible. L’exemple suivant définit puis confirme le dernier en-tête de colonne comme élément de focus.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXSetfocuseditem()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Check that we get the value we set.
   int item = m_headerCtrl.GetItemCount() - 1;
   m_headerCtrl.SetFocusedItem(item);
   int itemGet = m_headerCtrl.GetFocusedItem();
   CString str = _T("Set: focused item = %d\nGet: focused item = %d");
   str.Format(str, item, itemGet);
   MessageBox(str, _T("Set/GetFocused Item"));
}

CHeaderCtrl ::SetHotDivider

Modifie le séparateur entre les éléments d’en-tête pour indiquer un glisser-déplacer manuel d’un élément d’en-tête.

int SetHotDivider(CPoint pt);
int SetHotDivider(int nIndex);

Paramètres

pt
Position du pointeur. Le contrôle d’en-tête met en surbrillance le séparateur approprié en fonction de la position du pointeur.

nIndex
Index du séparateur mis en surbrillance.

Valeur de retour

Index du séparateur mis en surbrillance.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_SETHOTDIVIDER, comme décrit dans le Kit de développement logiciel (SDK) Windows. Il est fourni pour prendre en charge le glisser-déplacer de l’élément d’en-tête.

Exemple

void CMyHeaderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
   SetHotDivider(point);

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl ::SetImageList

Affecte une liste d’images à un contrôle d’en-tête.

CImageList* SetImageList(CImageList* pImageList);

Paramètres

pImageList
Pointeur vers un CImageList objet contenant la liste d’images à affecter au contrôle d’en-tête.

Valeur de retour

Pointeur vers l’objet CImageList précédemment affecté au contrôle d’en-tête.

Notes

Cette fonction membre implémente le comportement du message Win32 HDM_SETIMAGELIST, comme décrit dans le Kit de développement logiciel (SDK) Windows. Objet CImageList vers lequel le pointeur retourné pointe est un objet temporaire et est supprimé dans le traitement au moment d’inactivité suivant.

Exemple

Consultez l’exemple de CHeaderCtrl ::GetImageList.

CHeaderCtrl ::SetItem

Définit les attributs de l’élément spécifié dans un contrôle d’en-tête.

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

Paramètres

Osbl
Index de base zéro de l’élément à manipuler.

pHeaderItem
Pointeur vers une structure HDITEM qui contient des informations sur le nouvel élément.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Exemple

Consultez l’exemple de CHeaderCtrl ::GetItem.

CHeaderCtrl ::SetOrderArray

Définit l’ordre de gauche à droite des éléments dans un contrôle d’en-tête.

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

Paramètres

iCount
Nombre d’éléments de contrôle d’en-tête.

piArray
Pointeur vers l’adresse d’une mémoire tampon qui reçoit les valeurs d’index des éléments dans le contrôle d’en-tête, dans l’ordre dans lequel ils apparaissent de gauche à droite.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Cette fonction membre implémente le comportement de la macro Win32 HDM_SETORDERARRAY, comme décrit dans le Kit de développement logiciel (SDK) Windows. Il est fourni pour prendre en charge l’ordre des éléments d’en-tête.

Exemple

Consultez l’exemple de CHeaderCtrl ::GetOrderArray.

Voir aussi

CWnd, classe
Graphique hiérarchique
CTabCtrl, classe
CListCtrl, classe
CImageList, classe