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
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_CREATEDRAGIMAGE, 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
nPos
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.
bDiscardChanges
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 ignorer 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_GETBITMAPMARGIN, 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_headerCtrl
utilisé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
nPos
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_SPLITBUTTON. 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_headerCtrl
utilisé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_SPLITBUTTON 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_headerCtrl
utilisé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_headerCtrl
utilisé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
nPos
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_SETBITMAPMARGIN, 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_headerCtrl
utilisé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
nPos
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