Freigeben über


CHeaderCtrl-Klasse

Stellt die Funktionalität des allgemeinen Windows-Headersteuerelements bereit.

Syntax

class CHeaderCtrl : public CWnd

Member

Öffentliche Konstruktoren

Name Beschreibung
CHeaderCtrl::CHeaderCtrl Erstellt ein CHeaderCtrl-Objekt.

Öffentliche Methoden

Name Beschreibung
CHeaderCtrl::ClearAllFilters Löscht alle Filter für ein Kopfzeilensteuerelement.
CHeaderCtrl::ClearFilter Löscht den Filter für ein Kopfzeilensteuerelement.
CHeaderCtrl::Create Erstellt ein Kopfzeilensteuerelement und fügt es an ein CHeaderCtrl Objekt an.
CHeaderCtrl::CreateDragImage Erstellt eine transparente Version des Bilds eines Elements innerhalb eines Kopfzeilensteuerelements.
CHeaderCtrl::CreateEx Erstellt ein Kopfzeilensteuerelement mit den angegebenen erweiterten Windows-Formatvorlagen und fügt es an ein CListCtrl Objekt an.
CHeaderCtrl::D eleteItem Löscht ein Element aus einem Kopfzeilensteuerelement.
CHeaderCtrl::D rawItem Zeichnet das angegebene Element eines Kopfzeilensteuerelements.
CHeaderCtrl::EditFilter Beginnt mit der Bearbeitung des angegebenen Filters eines Kopfzeilensteuerelements.
CHeaderCtrl::GetBitmapMargin Ruft die Breite des Rands einer Bitmap in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetFocusedItem Ruft den Bezeichner des Elements im aktuellen Kopfzeilensteuerelement ab, das den Fokus hat.
CHeaderCtrl::GetImageList Ruft das Handle einer Bildliste ab, die zum Zeichnen von Kopfzeilenelementen in einem Kopfzeilensteuerelement verwendet wird.
CHeaderCtrl::GetItem Ruft Informationen zu einem Element in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetItemCount Ruft die Anzahl der Elemente in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetItemDropDownRect Ruft die umgebenden Rechteckinformationen für die angegebene Dropdownschaltfläche in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetItemRect Ruft das umgebende Rechteck für ein bestimmtes Element in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetOrderArray Ruft die Reihenfolge von Elementen von links nach rechts in einem Kopfzeilensteuerelement ab.
CHeaderCtrl::GetOverflowRect Ruft das umgebende Rechteck der Überlaufschaltfläche für das aktuelle Kopfzeilensteuerelement ab.
CHeaderCtrl::HitTest Bestimmt, welches Kopfzeilenelement sich an einem bestimmten Punkt befindet.
CHeaderCtrl::InsertItem Fügt ein neues Element in ein Kopfzeilensteuerelement ein.
CHeaderCtrl::Layout Ruft die Größe und Position eines Kopfzeilensteuerelements innerhalb eines bestimmten Rechtecks ab.
CHeaderCtrl::OrderToIndex Ruft den Indexwert für ein Element basierend auf seiner Reihenfolge im Kopfzeilensteuerelement ab.
CHeaderCtrl::SetBitmapMargin Legt die Breite des Rands einer Bitmap in einem Kopfzeilensteuerelement fest.
CHeaderCtrl::SetFilterChangeTimeout Legt das Timeoutintervall zwischen dem Zeitpunkt fest, zu dem eine Änderung in den Filterattributen und dem Posten einer HDN_FILTERCHANGE Benachrichtigung erfolgt.
CHeaderCtrl::SetFocusedItem Legt den Fokus auf ein angegebenes Kopfzeilenelement im aktuellen Kopfzeilensteuerelement fest.
CHeaderCtrl::SetHotDivider Ändert die Trennlinie zwischen Kopfzeilenelementen, um ein manuelles Ziehen und Ablegen eines Kopfzeilenelements anzugeben.
CHeaderCtrl::SetImageList Weist einem Kopfzeilensteuerelement eine Bildliste zu.
CHeaderCtrl::SetItem Legt die Attribute des angegebenen Elements in einem Kopfzeilensteuerelement fest.
CHeaderCtrl::SetOrderArray Legt die Reihenfolge von Elementen in einem Kopfzeilensteuerelement von links nach rechts fest.

Hinweise

Ein Kopfzeilensteuerelement ist ein Fenster, das in der Regel über einer Reihe von Spalten mit Text oder Zahlen positioniert wird. Er enthält einen Titel für jede Spalte und kann in Teile unterteilt werden. Der Benutzer kann die Trennlinien ziehen, die die Teile trennen, um die Breite der einzelnen Spalten festzulegen. Eine Abbildung eines Kopfzeilensteuerelements finden Sie unter Header-Steuerelemente.

Dieses Steuerelement (und daher die Klasse) ist nur für Programme verfügbar, die CHeaderCtrl unter Windows 95/98 und Windows NT, Version 3.51 und höher ausgeführt werden.

Zu den allgemeinen Steuerelementen für Windows 95/Internet Explorer 4.0 wurden folgende Funktionen hinzugefügt:

  • Benutzerdefinierte Sortierung des Kopfzeilenelements.

  • Kopfzeilenelement ziehen und ablegen, zum Neuanordnen von Kopfzeilenelementen. Verwenden Sie beim Erstellen des CHeaderCtrl Objekts die HDS_DRAGDROP Formatvorlage.

  • Kopfzeilenspaltentext kann während der Spaltenänderung ständig angezeigt werden. Verwenden Sie beim Erstellen eines CHeaderCtrl Objekts die HDS_FULLDRAG Formatvorlage.

  • Header hot tracking, which highlights the header item when the pointer is hovering over it. Verwenden Sie beim Erstellen des CHeaderCtrl Objekts die HDS_HOTTRACK Formatvorlage.

  • Unterstützung für Bildlisten. Kopfzeilenelemente können Bilder enthalten, die in einem CImageList Objekt oder Text gespeichert sind.

Weitere Informationen zur Verwendung CHeaderCtrlfinden Sie unter "Steuerelemente und Verwenden von CHeaderCtrl".

Vererbungshierarchie

CObject

CCmdTarget

CWnd

CHeaderCtrl

Anforderungen

Header: afxcmn.h

CHeaderCtrl::CHeaderCtrl

Erstellt ein CHeaderCtrl-Objekt.

CHeaderCtrl();

Beispiel

// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;

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

CHeaderCtrl::ClearAllFilters

Löscht alle Filter für ein Kopfzeilensteuerelement.

BOOL ClearAllFilters();

Rückgabewert

TRUE, wenn diese Methode erfolgreich ist; andernfalls FALSE.

Hinweise

Diese Methode implementiert das Verhalten der Win32-Nachricht HDM_CLEARFILTER mit einem Spaltenwert von -1, wie im Windows SDK beschrieben.

Beispiel

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

Löscht den Filter für ein Kopfzeilensteuerelement.

BOOL ClearFilter(int nColumn);

Parameter

nColumn
Spaltenwert, der angibt, welcher Filter gelöscht werden soll.

Rückgabewert

TRUE, wenn diese Methode erfolgreich ist; andernfalls FALSE.

Hinweise

Diese Methode implementiert das Verhalten der Win32-Nachricht HDM_CLEARFILTER, wie im Windows SDK beschrieben.

Beispiel

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

Erstellt ein Kopfzeilensteuerelement und fügt es an ein CHeaderCtrl Objekt an.

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

Parameter

dwStyle
Gibt die Formatvorlage des Kopfzeilensteuerelements an. Eine Beschreibung der Formatvorlagen für Kopfzeilensteuerelemente finden Sie unter Header-Steuerelementstile im Windows SDK.

rect
Gibt die Größe und Position des Kopfzeilensteuerelements an. Es kann sich entweder um ein CRect-Objekt oder eine RECT-Struktur handeln.

pParentWnd
Gibt das übergeordnete Fenster des Kopfzeilensteuerelements an, in der Regel ein CDialog. Er darf nicht NULL sein.

Nid
Gibt die ID des Kopfzeilensteuerelements an.

Rückgabewert

Nonzero, wenn die Initialisierung erfolgreich war; andernfalls 0.

Hinweise

Sie erstellen ein CHeaderCtrl Objekt in zwei Schritten. Rufen Sie zuerst den Konstruktor auf, und rufen Sie dann auf Create, wodurch das Headersteuerelement erstellt und an das CHeaderCtrl Objekt angefügt wird.

Zusätzlich zu den Formatvorlagen für Kopfzeilensteuerelemente können Sie die folgenden allgemeinen Steuerelementstile verwenden, um zu bestimmen, wie sich das Kopfzeilensteuerelement positioniert und seine Größe ändert (weitere Informationen finden Sie unter "Allgemeine Steuerelementformatvorlagen "):

  • CCS_BOTTOM bewirkt, dass sich das Steuerelement am unteren Rand des Clientbereichs des übergeordneten Fensters positioniert und die Breite der Breite des übergeordneten Fensters entspricht.

  • CCS_NODIVIDER Verhindert, dass am oberen Rand des Steuerelements eine Hervorhebung mit zwei Pixeln gezeichnet wird.

  • CCS_NOMOVEY bewirkt, dass sich die Größe des Steuerelements horizontal, aber nicht vertikal als Reaktion auf eine WM_SIZE Nachricht ändert. Wenn die CCS_NORESIZE-Formatvorlage verwendet wird, wird diese Formatvorlage nicht angewendet. Kopfzeilensteuerelemente weisen diese Formatvorlage standardmäßig auf.

  • CCS_NOPARENTALIGN Verhindert, dass das Steuerelement automatisch nach oben oder unten im übergeordneten Fenster verschoben wird. Stattdessen behält das Steuerelement seine Position im übergeordneten Fenster bei, obwohl sich die Größe des übergeordneten Fensters ändert. Wenn auch die CCS_TOP- oder CCS_BOTTOM-Formatvorlage verwendet wird, wird die Höhe an die Standardeinstellung angepasst, die Position und Breite bleiben jedoch unverändert.

  • CCS_NORESIZE Verhindert, dass das Steuerelement beim Festlegen der Anfangsgröße oder einer neuen Größe die Standardbreite und -höhe verwendet. Stattdessen verwendet das Steuerelement die in der Anforderung für die Erstellung oder Größenanpassung angegebene Breite und Höhe.

  • CCS_TOP bewirkt, dass sich das Steuerelement am oberen Rand des Clientbereichs des übergeordneten Fensters positioniert und die Breite der Breite des übergeordneten Fensters entspricht.

Sie können auch die folgenden Fensterformatvorlagen auf ein Kopfzeilensteuerelement anwenden (weitere Informationen finden Sie unter "Fensterformatvorlagen "):

  • WS_CHILD Erstellt ein untergeordnetes Fenster. Kann nicht mit der WS_POPUP-Formatvorlage verwendet werden.

  • WS_VISIBLE Erstellt ein anfangs sichtbares Fenster.

  • WS_DISABLED Erstellt ein anfangs deaktiviertes Fenster.

  • WS_GROUP Gibt das erste Steuerelement einer Gruppe von Steuerelementen an, in der der Benutzer mit den Pfeiltasten von einem Steuerelement zum nächsten wechseln kann. Alle Steuerelemente, die nach dem ersten Steuerelement mit der WS_GROUP Formatvorlage definiert sind, gehören derselben Gruppe an. Das nächste Steuerelement mit der WS_GROUP Formatvorlage endet die Formatvorlagengruppe und startet die nächste Gruppe (d. a. eine Gruppe endet an der nächsten Stelle).

  • WS_TABSTOP Gibt eine beliebige Anzahl von Steuerelementen an, über die der Benutzer mithilfe der TAB-TASTE navigieren kann. Die TAB-TASTE verschiebt den Benutzer zum nächsten Steuerelement, das durch die WS_TABSTOP Formatvorlage angegeben wird.

Wenn Sie erweiterte Fensterstile mit Ihrem Steuerelement verwenden möchten, rufen Sie CreateEx anstelle von Create.

Beispiel

// 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

Erstellt ein Steuerelement (ein untergeordnetes Fenster) und ordnen es dem CHeaderCtrl Objekt zu.

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

Parameter

dwExStyle
Gibt die erweiterte Formatvorlage des zu erstellenden Steuerelements an. Eine Liste der erweiterten Windows-Stile finden Sie unter dem dwExStyle-Parameter für CreateWindowEx im Windows SDK.

dwStyle
Formatvorlage des Kopfzeilensteuerelements. Eine Beschreibung der Formatvorlagen für Kopfzeilensteuerelemente finden Sie unter Header-Steuerelementstile im Windows SDK. Eine Liste mit zusätzlichen Formatvorlagen finden Sie unter "Erstellen ".

rect
Ein Verweis auf eine RECT-Struktur , die die Größe und Position des zu erstellenden Fensters in Clientkoordinaten von pParentWnd beschreibt.

pParentWnd
Ein Zeiger auf das Fenster, das das übergeordnete Steuerelement ist.

Nid
Die Untergeordnete Fenster-ID des Steuerelements.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Hinweise

Verwenden Sie CreateEx anstelle erweiterter Create Windows-Formatvorlagen, die durch die erweiterte Windows-Formatvorlage WS_EX_ angegeben werden.

CHeaderCtrl::CreateDragImage

Erstellt eine transparente Version des Bilds eines Elements innerhalb eines Kopfzeilensteuerelements.

CImageList* CreateDragImage(int nIndex);

Parameter

nIndex
Der nullbasierte Index des Elements innerhalb des Kopfzeilensteuerelements. Das diesem Element zugewiesene Bild ist die Basis für das transparente Bild.

Rückgabewert

Ein Zeiger auf ein CImageList-Objekt bei erfolgreicher Ausführung; andernfalls NULL. Die zurückgegebene Liste enthält nur ein Bild.

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_CREATEDRAGIMAGE, wie im Windows SDK beschrieben. Es wird bereitgestellt, um das Ziehen und Ablegen von Kopfzeilenelementen zu unterstützen.

Das CImageList Objekt, auf das der zurückgegebene Zeiger verweist, ist ein temporäres Objekt und wird in der nächsten Leerlaufzeitverarbeitung gelöscht.

CHeaderCtrl::D eleteItem

Löscht ein Element aus einem Kopfzeilensteuerelement.

BOOL DeleteItem(int nPos);

Parameter

nPos
Gibt den nullbasierten Index des zu löschenden Elements an.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Beispiel

int nCount = m_myHeaderCtrl.GetItemCount();

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

CHeaderCtrl::D rawItem

Wird vom Framework aufgerufen, wenn sich ein visueller Aspekt eines Besitzer-Draw-Kopfzeilen-Steuerelements ändert.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parameter

lpDrawItemStruct
Ein Zeiger auf eine DRAWITEMSTRUCT-Struktur , die das zu zeichnende Element beschreibt.

Hinweise

Das itemAction Element der DRAWITEMSTRUCT Struktur definiert die Zeichnungsaktion, die ausgeführt werden soll.

Standardmäßig führt diese Memberfunktion nichts aus. Überschreiben Sie diese Memberfunktion, um die Zeichnung für ein Besitzer-Draw-Objekt CHeaderCtrl zu implementieren.

Die Anwendung sollte alle GDI-Objekte (Graphics Device Interface) wiederherstellen, die für den in lpDrawItemStruct bereitgestellten Anzeigekontext ausgewählt sind, bevor diese Memberfunktion beendet wird.

Beispiel

// 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

Beginnt mit der Bearbeitung des angegebenen Filters eines Kopfzeilensteuerelements.

BOOL EditFilter(
    int nColumn,
    BOOL bDiscardChanges);

Parameter

nColumn
Die zu bearbeitende Spalte.

bDiscardChanges
Ein Wert, der angibt, wie die Bearbeitungsänderungen des Benutzers behandelt werden, wenn der Benutzer den Filter bearbeitet, wenn die HDM_EDITFILTER Nachricht gesendet wird.

Geben Sie WAHR an, um die vom Benutzer vorgenommenen Änderungen zu verwerfen, oder FALSE, um die vom Benutzer vorgenommenen Änderungen zu akzeptieren.

Rückgabewert

TRUE, wenn diese Methode erfolgreich ist; andernfalls FALSE.

Hinweise

Diese Methode implementiert das Verhalten der Win32-Nachrichten-HDM_EDITFILTER, wie im Windows SDK beschrieben.

Beispiel

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

CHeaderCtrl::GetBitmapMargin

Ruft die Breite des Rands einer Bitmap in einem Kopfzeilensteuerelement ab.

int GetBitmapMargin() const;

Rückgabewert

Die Breite des Bitmaprands in Pixeln.

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_GETBITMAPMARGIN, wie im Windows SDK beschrieben.

Beispiel

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

Ruft den Index des Elements ab, das den Fokus im aktuellen Kopfzeilensteuerelement hat.

int GetFocusedItem() const;

Rückgabewert

Der nullbasierte Index des Kopfzeilenelements, das den Fokus besitzt.

Hinweise

Diese Methode sendet die HDM_GETFOCUSEDITEM Nachricht, die im Windows SDK beschrieben wird.

Beispiel

Im ersten Codebeispiel wird die Variable definiert, m_headerCtrldie für den Zugriff auf das aktuelle Headersteuerelement verwendet wird. Diese Variable wird im nächsten Beispiel verwendet.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Im nächsten Codebeispiel werden die SetFocusedItem Und GetFocusedItem Methoden veranschaulicht. In einem früheren Abschnitt des Codes haben wir ein Kopfzeilensteuerelement mit fünf Spalten erstellt. Sie können jedoch ein Spaltentrennzeichen ziehen, damit die Spalte nicht sichtbar ist. Im folgenden Beispiel wird die letzte Spaltenüberschrift als Fokuselement festgelegt und bestätigt.

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

Ruft das Handle einer Bildliste ab, die zum Zeichnen von Kopfzeilenelementen in einem Kopfzeilensteuerelement verwendet wird.

CImageList* GetImageList() const;

Rückgabewert

Ein Zeiger auf ein CImageList-Objekt .

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_GETIMAGELIST, wie im Windows SDK beschrieben. Das CImageList Objekt, auf das der zurückgegebene Zeiger verweist, ist ein temporäres Objekt und wird in der nächsten Leerlaufzeitverarbeitung gelöscht.

Beispiel

// 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

Ruft Informationen zu einem Kopfzeilensteuerelementelement ab.

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

Parameter

nPos
Gibt den nullbasierten Index des abzurufenden Elements an.

pHeaderItem
Zeiger auf eine HDITEM-Struktur , die das neue Element empfängt. Diese Struktur wird mit den InsertItem Funktionen und SetItem Memberfunktionen verwendet. Alle im mask Element festgelegten Flags stellen sicher, dass Werte in den entsprechenden Elementen beim Zurückgeben ordnungsgemäß ausgefüllt werden. Wenn das mask Element auf Null festgelegt ist, sind Werte in den anderen Strukturelementen bedeutungslos.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Beispiel

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

Ruft die Anzahl der Elemente in einem Kopfzeilensteuerelement ab.

int GetItemCount() const;

Rückgabewert

Anzahl der Kopfzeilensteuerungselemente bei erfolgreicher Ausführung; andernfalls - 1.

Beispiel

Sehen Sie sich das Beispiel für CHeaderCtrl::D eleteItem an.

CHeaderCtrl::GetItemDropDownRect

Ruft das umgebende Rechteck der Dropdownschaltfläche für ein Kopfzeilenelement im aktuellen Kopfzeilensteuerelement ab.

BOOL GetItemDropDownRect(
    int iItem,
    LPRECT lpRect) const;

Parameter

iItem
[in] Nullbasierter Index eines Kopfzeilenelements, dessen Format HDF_SPLITBUTTON ist. Weitere Informationen finden Sie im fmt Element der HDITEM-Struktur .

lpRect
[out] Zeiger auf eine RECT-Struktur , um die umgebenden Rechteckinformationen zu empfangen.

Rückgabewert

TRUE, wenn diese Funktion erfolgreich ist; andernfalls FALSE.

Hinweise

Diese Methode sendet die HDM_GETITEMDROPDOWNRECT Nachricht, die im Windows SDK beschrieben wird.

Beispiel

Im ersten Codebeispiel wird die Variable definiert, m_headerCtrldie für den Zugriff auf das aktuelle Headersteuerelement verwendet wird. Diese Variable wird im nächsten Beispiel verwendet.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Im nächsten Codebeispiel wird die GetItemDropDownRect Methode veranschaulicht. In einem früheren Abschnitt des Codes haben wir ein Kopfzeilensteuerelement mit fünf Spalten erstellt. Das folgende Codebeispiel zeichnet ein 3D-Rechteck um die Position in der ersten Spalte, die für die Dropdownschaltfläche für die Kopfzeile reserviert ist.

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

Ruft das umgebende Rechteck für ein bestimmtes Element in einem Kopfzeilensteuerelement ab.

BOOL GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Parameter

nIndex
Der nullbasierte Index des Kopfzeilensteuerelementelements.

lpRect
Ein Zeiger auf die Adresse einer RECT-Struktur , die die umgebenden Rechteckinformationen empfängt.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Hinweise

Diese Methode implementiert das Verhalten der Win32-Nachricht HDM_GETITEMRECT, wie im Windows SDK beschrieben.

CHeaderCtrl::GetOrderArray

Ruft die Reihenfolge von Elementen von links nach rechts in einem Kopfzeilensteuerelement ab.

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

Parameter

piArray
Ein Zeiger auf die Adresse eines Puffers, der die Indexwerte der Elemente im Kopfzeilensteuerelement empfängt, in der Reihenfolge, in der sie von links nach rechts angezeigt werden.

iCount
Die Anzahl der Kopfzeilensteuerelementelemente. Muss nicht negativ sein.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Meldung HDM_GETORDERARRAY, wie im Windows SDK beschrieben. Es wird bereitgestellt, um die Sortierung von Kopfzeilenelementen zu unterstützen.

Beispiel

// 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

Ruft das umgebende Rechteck der Überlaufschaltfläche des aktuellen Kopfzeilensteuerelements ab.

BOOL GetOverflowRect(LPRECT lpRect) const;

Parameter

lpRect
[out] Zeiger auf eine RECT-Struktur , die die umgebenden Rechteckinformationen empfängt.

Rückgabewert

TRUE, wenn diese Funktion erfolgreich ist; andernfalls FALSE.

Hinweise

Wenn das Kopfzeilensteuerelement mehr Elemente enthält, als gleichzeitig angezeigt werden können, kann das Steuerelement eine Überlaufschaltfläche anzeigen, die zu Elementen scrollt, die nicht sichtbar sind. Das Kopfzeilensteuerelement muss über die HDS_OVERFLOW und HDF_SPLITBUTTON Formatvorlagen verfügen, um die Überlaufschaltfläche anzuzeigen. Das umgebende Rechteck schließt die Überlaufschaltfläche ein und ist nur vorhanden, wenn die Überlaufschaltfläche angezeigt wird. Weitere Informationen finden Sie unter Header-Steuerelementformatvorlagen.

Diese Methode sendet die HDM_GETOVERFLOWRECT Nachricht, die im Windows SDK beschrieben wird.

Beispiel

Im ersten Codebeispiel wird die Variable definiert, m_headerCtrldie für den Zugriff auf das aktuelle Headersteuerelement verwendet wird. Diese Variable wird im nächsten Beispiel verwendet.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Im nächsten Codebeispiel wird die GetOverflowRect Methode veranschaulicht. In einem früheren Abschnitt des Codes haben wir ein Kopfzeilensteuerelement mit fünf Spalten erstellt. Sie können jedoch ein Spaltentrennzeichen ziehen, damit die Spalte nicht sichtbar ist. Wenn einige Spalten nicht sichtbar sind, zeichnet das Kopfzeilensteuerelement eine Überlaufschaltfläche. Das folgende Codebeispiel zeichnet ein 3D-Rechteck um die Position der Überlaufschaltfläche.

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

Bestimmt, welches Kopfzeilenelement sich an einem bestimmten Punkt befindet.

int HitTest(LPHDHITTESTINFO* phdhti);

Parameter

phdhti
[in, out] Zeiger auf eine HDHITTESTINFO-Struktur , die den Testpunkt angibt und die Ergebnisse des Tests empfängt.

Rückgabewert

Der nullbasierte Index des Kopfzeilenelements( falls vorhanden) an der angegebenen Position; andernfalls -1.

Hinweise

Diese Methode sendet die HDM_HITTEST Nachricht, die im Windows SDK beschrieben wird.

Beispiel

Im ersten Codebeispiel wird die Variable definiert, m_headerCtrldie für den Zugriff auf das aktuelle Headersteuerelement verwendet wird. Diese Variable wird im nächsten Beispiel verwendet.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Im nächsten Codebeispiel wird die HitTest Methode veranschaulicht. In einem früheren Abschnitt dieses Codebeispiels haben wir ein Kopfzeilensteuerelement mit fünf Spalten erstellt. Sie können jedoch ein Spaltentrennzeichen ziehen, damit die Spalte nicht sichtbar ist. In diesem Beispiel wird der Index der Spalte gemeldet, wenn sie sichtbar ist, und -1, wenn die Spalte nicht sichtbar ist.

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

Fügt ein neues Element in ein Kopfzeilensteuerelement am angegebenen Index ein.

int InsertItem(
    int nPos,
    HDITEM* phdi);

Parameter

nPos
Der nullbasierte Index des einzufügenden Elements. Wenn der Wert null ist, wird das Element am Anfang des Kopfzeilensteuerelements eingefügt. Wenn der Wert größer als der Maximalwert ist, wird das Element am Ende des Kopfzeilensteuerelements eingefügt.

phdi
Zeiger auf eine HDITEM-Struktur , die Informationen zum einzufügenden Element enthält.

Rückgabewert

Index des neuen Elements bei erfolgreicher Ausführung; andernfalls - 1.

Beispiel

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

Ruft die Größe und Position eines Kopfzeilensteuerelements innerhalb eines bestimmten Rechtecks ab.

BOOL Layout(HDLAYOUT* pHeaderLayout);

Parameter

pHeaderLayout
Zeiger auf eine HDLAYOUT-Struktur , die Informationen enthält, die zum Festlegen der Größe und Position eines Kopfzeilensteuerelements verwendet werden.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Hinweise

Diese Funktion wird verwendet, um die geeigneten Dimensionen für ein neues Kopfzeilensteuerelement zu bestimmen, das das angegebene Rechteck einnimmt.

Beispiel

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

Ruft den Indexwert für ein Element basierend auf seiner Reihenfolge im Kopfzeilensteuerelement ab.

int OrderToIndex(int nOrder) const;

Parameter

nOrder
Die nullbasierte Reihenfolge, in der das Element im Kopfzeilensteuerelement angezeigt wird, von links nach rechts.

Rückgabewert

Der Index des Elements basierend auf seiner Reihenfolge im Kopfzeilensteuerelement. Der Index zählt von links nach rechts, beginnend mit 0.

Hinweise

Diese Memberfunktion implementiert das Verhalten des Win32-Makros HDM_ORDERTOINDEX, wie im Windows SDK beschrieben. Es wird bereitgestellt, um die Sortierung von Kopfzeilenelementen zu unterstützen.

CHeaderCtrl::SetBitmapMargin

Legt die Breite des Rands einer Bitmap in einem Kopfzeilensteuerelement fest.

int SetBitmapMargin(int nWidth);

Parameter

nWidth
Die in Pixel angegebene Breite des Rands, der eine Bitmap in ein vorhandenes Kopfzeilensteuerelement umgibt.

Rückgabewert

Die Breite des Bitmaprands in Pixeln.

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_SETBITMAPMARGIN, wie im Windows SDK beschrieben.

Beispiel

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

Legt das Timeoutintervall zwischen dem Zeitpunkt fest, zu dem eine Änderung in den Filterattributen und der Veröffentlichung einer HDN_FILTERCHANGE benachrichtigung erfolgt.

int SetFilterChangeTimeout(DWORD dwTimeOut);

Parameter

dwTimeOut
Timeoutwert in Millisekunden.

Rückgabewert

Der Index des zu ändernden Filtersteuerelements.

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_SETFILTERCHANGETIMEOUT, wie im Windows SDK beschrieben.

Beispiel

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

Legt den Fokus auf ein angegebenes Kopfzeilenelement im aktuellen Kopfzeilensteuerelement fest.

BOOL SetFocusedItem(int iItem);

Parameter

iItem
[in] Nullbasierter Index eines Kopfzeilenelements.

Rückgabewert

TRUE, wenn diese Methode erfolgreich ist; andernfalls FALSE.

Hinweise

Diese Methode sendet die HDM_SETFOCUSEDITEM Nachricht, die im Windows SDK beschrieben wird.

Beispiel

Im ersten Codebeispiel wird die Variable definiert, m_headerCtrldie für den Zugriff auf das aktuelle Headersteuerelement verwendet wird. Diese Variable wird im nächsten Beispiel verwendet.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Im nächsten Codebeispiel werden die SetFocusedItem Und GetFocusedItem Methoden veranschaulicht. In einem früheren Abschnitt des Codes haben wir ein Kopfzeilensteuerelement mit fünf Spalten erstellt. Sie können jedoch ein Spaltentrennzeichen ziehen, damit die Spalte nicht sichtbar ist. Im folgenden Beispiel wird die letzte Spaltenüberschrift als Fokuselement festgelegt und bestätigt.

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

Ändert die Trennlinie zwischen Kopfzeilenelementen, um ein manuelles Ziehen und Ablegen eines Kopfzeilenelements anzugeben.

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

Parameter

pt
Die Position des Zeigers. Das Kopfzeilensteuerelement hebt die entsprechende Trennlinie basierend auf der Position des Zeigers hervor.

nIndex
Der Index der hervorgehobenen Trennlinie.

Rückgabewert

Der Index der hervorgehobenen Trennlinie.

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_SETHOTDIVIDER, wie im Windows SDK beschrieben. Es wird bereitgestellt, um das Ziehen und Ablegen von Kopfzeilenelementen zu unterstützen.

Beispiel

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

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl::SetImageList

Weist einem Kopfzeilensteuerelement eine Bildliste zu.

CImageList* SetImageList(CImageList* pImageList);

Parameter

pImageList
Ein Zeiger auf ein CImageList Objekt, das die Bildliste enthält, die dem Kopfzeilensteuerelement zugewiesen werden soll.

Rückgabewert

Ein Zeiger auf das zuvor dem Headersteuerelement zugewiesene CImageList-Objekt .

Hinweise

Diese Memberfunktion implementiert das Verhalten der Win32-Nachricht HDM_SETIMAGELIST, wie im Windows SDK beschrieben. Das CImageList Objekt, auf das der zurückgegebene Zeiger verweist, ist ein temporäres Objekt und wird in der nächsten Leerlaufzeitverarbeitung gelöscht.

Beispiel

Sehen Sie sich das Beispiel für CHeaderCtrl::GetImageList an.

CHeaderCtrl::SetItem

Legt die Attribute des angegebenen Elements in einem Kopfzeilensteuerelement fest.

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

Parameter

nPos
Der nullbasierte Index des zu bearbeitenden Elements.

pHeaderItem
Zeiger auf eine HDITEM-Struktur , die Informationen zum neuen Element enthält.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Beispiel

Sehen Sie sich das Beispiel für CHeaderCtrl::GetItem an.

CHeaderCtrl::SetOrderArray

Legt die Reihenfolge von Elementen in einem Kopfzeilensteuerelement von links nach rechts fest.

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

Parameter

iCount
Die Anzahl der Kopfzeilensteuerelementelemente.

piArray
Ein Zeiger auf die Adresse eines Puffers, der die Indexwerte der Elemente im Kopfzeilensteuerelement empfängt, in der Reihenfolge, in der sie von links nach rechts angezeigt werden.

Rückgabewert

Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).

Hinweise

Diese Memberfunktion implementiert das Verhalten des Win32-Makros HDM_SETORDERARRAY, wie im Windows SDK beschrieben. Es wird bereitgestellt, um die Sortierung von Kopfzeilenelementen zu unterstützen.

Beispiel

Sehen Sie sich das Beispiel für CHeaderCtrl::GetOrderArray an.

Siehe auch

CWnd-Klasse
Hierarchiediagramm
CTabCtrl-Klasse
CListCtrl-Klasse
CImageList-Klasse