Condividi tramite


Classe CHeaderCtrl

Fornisce la funzionalità del controllo intestazione comune di Windows.

Sintassi

class CHeaderCtrl : public CWnd

Membri

Costruttori pubblici

Nome Descrizione
CHeaderCtrl::CHeaderCtrl Costruisce un oggetto CHeaderCtrl.

Metodi pubblici

Nome Descrizione
CHeaderCtrl::ClearAllFilters Cancella tutti i filtri per un controllo intestazione.
CHeaderCtrl::ClearFilter Cancella il filtro per un controllo intestazione.
CHeaderCtrl::Create Crea un controllo intestazione e lo collega a un CHeaderCtrl oggetto .
CHeaderCtrl::CreateDragImage Crea una versione trasparente dell'immagine di un elemento all'interno di un controllo intestazione.
CHeaderCtrl::CreateEx Crea un controllo intestazione con gli stili estesi di Windows specificati e lo associa a un CListCtrl oggetto .
CHeaderCtrl::D eleteItem Elimina un elemento da un controllo intestazione.
CHeaderCtrl::D rawItem Disegna l'elemento specificato di un controllo intestazione.
CHeaderCtrl::EditFilter Avvia la modifica del filtro specificato di un controllo intestazione.
CHeaderCtrl::GetBitmapMargin Recupera la larghezza del margine di una bitmap in un controllo intestazione.
CHeaderCtrl::GetFocusedItem Ottiene l'identificatore dell'elemento nel controllo intestazione corrente con lo stato attivo.
CHeaderCtrl::GetImageList Recupera l'handle di un elenco di immagini utilizzato per gli elementi dell'intestazione di disegno in un controllo intestazione.
CHeaderCtrl::GetItem Recupera informazioni su un elemento in un controllo intestazione.
CHeaderCtrl::GetItemCount Recupera un conteggio degli elementi in un controllo intestazione.
CHeaderCtrl::GetItemDropDownRect Ottiene le informazioni sul rettangolo di delimitazione per il pulsante a discesa specificato in un controllo intestazione.
CHeaderCtrl::GetItemRect Recupera il rettangolo di delimitazione per un determinato elemento in un controllo intestazione.
CHeaderCtrl::GetOrderArray Recupera l'ordine da sinistra a destra degli elementi in un controllo intestazione.
CHeaderCtrl::GetOverflowRect Ottiene il rettangolo di delimitazione del pulsante di overflow per il controllo intestazione corrente.
CHeaderCtrl::HitTest Determina quale elemento di intestazione, se presente, si trova in un punto specificato.
CHeaderCtrl::InsertItem Inserisce un nuovo elemento in un controllo intestazione.
CHeaderCtrl::Layout Recupera le dimensioni e la posizione di un controllo intestazione all'interno di un determinato rettangolo.
CHeaderCtrl::OrderToIndex Recupera il valore di indice per un elemento in base al relativo ordine nel controllo intestazione.
CHeaderCtrl::SetBitmapMargin Imposta la larghezza del margine di una bitmap in un controllo intestazione.
CHeaderCtrl::SetFilterChangeTimeout Imposta l'intervallo di timeout tra il momento in cui viene apportata una modifica negli attributi del filtro e la registrazione di una HDN_FILTERCHANGE notifica.
CHeaderCtrl::SetFocusedItem Imposta lo stato attivo su un elemento di intestazione specificato nel controllo intestazione corrente.
CHeaderCtrl::SetHotDivider Modifica il divisore tra gli elementi dell'intestazione per indicare un trascinamento manuale di un elemento di intestazione.
CHeaderCtrl::SetImageList Assegna un elenco di immagini a un controllo intestazione.
CHeaderCtrl::SetItem Imposta gli attributi dell'elemento specificato in un controllo intestazione.
CHeaderCtrl::SetOrderArray Imposta l'ordine da sinistra a destra degli elementi in un controllo intestazione.

Osservazioni:

Un controllo intestazione è una finestra in genere posizionata sopra un set di colonne di testo o numeri. Contiene un titolo per ogni colonna e può essere diviso in parti. L'utente può trascinare i divisori che separano le parti per impostare la larghezza di ogni colonna. Per un'illustrazione di un controllo intestazione, vedere Controlli intestazione.

Questo controllo (e quindi la CHeaderCtrl classe ) è disponibile solo per i programmi eseguiti in Windows 95/98 e Windows NT versione 3.51 e successive.

Le funzionalità aggiunte per i controlli comuni di Windows 95/Internet Explorer 4.0 includono quanto segue:

  • Ordinamento personalizzato dell'elemento di intestazione.

  • Trascinare e rilasciare l'elemento di intestazione per riordinare gli elementi di intestazione. Usare lo stile HDS_DRAGDROP quando si crea l'oggetto CHeaderCtrl .

  • Testo della colonna di intestazione visualizzabile costantemente durante il ridimensionamento delle colonne. Usare lo stile HDS_FULLDRAG quando si crea un CHeaderCtrl oggetto .

  • Rilevamento rapido intestazione, che evidenzia l'elemento dell'intestazione quando il puntatore passa il puntatore su di esso. Usare lo stile HDS_HOTTRACK quando si crea l'oggetto CHeaderCtrl .

  • Supporto per l'elenco di immagini. Gli elementi di intestazione possono contenere immagini archiviate in un oggetto o in un CImageList testo.

Per altre informazioni sull'uso CHeaderCtrldi , vedere Controlli e uso di CHeaderCtrl.

Gerarchia di ereditarietà

CObject

CCmdTarget

CWnd

CHeaderCtrl

Requisiti

Intestazione: afxcmn.h

CHeaderCtrl::CHeaderCtrl

Costruisce un oggetto CHeaderCtrl.

CHeaderCtrl();

Esempio

// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;

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

CHeaderCtrl::ClearAllFilters

Cancella tutti i filtri per un controllo intestazione.

BOOL ClearAllFilters();

Valore restituito

TRUE se questo metodo ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Questo metodo implementa il comportamento del messaggio Win32 HDM_CLEARFILTER con un valore di colonna -1, come descritto in Windows SDK.

Esempio

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

Cancella il filtro per un controllo intestazione.

BOOL ClearFilter(int nColumn);

Parametri

nColumn
Valore di colonna che indica il filtro da cancellare.

Valore restituito

TRUE se questo metodo ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Questo metodo implementa il comportamento del messaggio Win32 HDM_CLEARFILTER, come descritto in Windows SDK.

Esempio

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

Crea un controllo intestazione e lo collega a un CHeaderCtrl oggetto .

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

Parametri

dwStyle
Specifica lo stile del controllo intestazione. Per una descrizione degli stili di controllo intestazione, vedere Stili di controllo intestazione in Windows SDK.

rect
Specifica le dimensioni e la posizione del controllo intestazione. Può essere un oggetto CRect o una struttura RECT .

pParentWnd
Specifica la finestra padre del controllo intestazione, in genere un oggetto CDialog. Non deve essere NULL.

nID
Specifica l'ID del controllo intestazione.

Valore restituito

Diverso da zero se l'inizializzazione ha avuto esito positivo; in caso contrario, zero.

Osservazioni:

Si costruisce un CHeaderCtrl oggetto in due passaggi. Prima di tutto, chiamare il costruttore e quindi chiamare Create, che crea il controllo intestazione e lo collega all'oggetto CHeaderCtrl .

Oltre agli stili dei controlli intestazione, è possibile utilizzare gli stili di controllo comuni seguenti per determinare il modo in cui il controllo intestazione posiziona e ridimensiona se stesso (vedere Stili di controllo comuni per altre informazioni):

  • CCS_BOTTOM fa sì che il controllo si posiziona nella parte inferiore dell'area client della finestra padre e imposta la larghezza come larghezza della finestra padre.

  • CCS_NODIVIDER Impedisce di disegnare un'evidenziazione a due pixel nella parte superiore del controllo.

  • CCS_NOMOVEY fa sì che il controllo venga ridimensionato e spostato orizzontalmente, ma non verticalmente, in risposta a un messaggio di WM_SIZE. Se viene utilizzato lo stile CCS_NORESIZE, questo stile non viene applicato. Per impostazione predefinita, i controlli intestazione hanno questo stile.

  • CCS_NOPARENTALIGN Impedisce lo spostamento automatico del controllo nella parte superiore o inferiore della finestra padre. Al contrario, il controllo mantiene la posizione all'interno della finestra padre nonostante le modifiche apportate alle dimensioni della finestra padre. Se viene utilizzato anche lo stile CCS_TOP o CCS_BOTTOM, l'altezza viene adattata al valore predefinito, ma la posizione e la larghezza rimangono invariate.

  • CCS_NORESIZE Impedisce al controllo di utilizzare la larghezza e l'altezza predefinite quando si impostano le dimensioni iniziali o una nuova dimensione. Il controllo usa invece la larghezza e l'altezza specificate nella richiesta di creazione o ridimensionamento.

  • CCS_TOP fa sì che il controllo si posiziona nella parte superiore dell'area client della finestra padre e imposta la larghezza come larghezza della finestra padre.

È anche possibile applicare gli stili di finestra seguenti a un controllo intestazione (vedere Stili finestra per altre informazioni):

  • WS_CHILD Crea una finestra figlio. Non può essere utilizzato con lo stile WS_POPUP.

  • WS_VISIBLE Crea una finestra inizialmente visibile.

  • WS_DISABLED Crea una finestra inizialmente disabilitata.

  • WS_GROUP Specifica il primo controllo di un gruppo di controlli in cui l'utente può passare da un controllo all'altro con i tasti di direzione. Tutti i controlli definiti con lo stile WS_GROUP dopo il primo controllo appartengono allo stesso gruppo. Il controllo successivo con lo stile WS_GROUP termina il gruppo di stili e avvia il gruppo successivo, ovvero un gruppo termina dove inizia il successivo.

  • WS_TABSTOP Specifica un numero qualsiasi di controlli tramite cui l'utente può spostarsi usando il tasto TAB. Il tasto TAB sposta l'utente al controllo successivo specificato dallo stile WS_TABSTOP.

Se si desidera usare gli stili di windows estesi con il controllo, chiamare CreateEx anziché Create.

Esempio

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

Crea un controllo (una finestra figlio) e lo associa all'oggetto CHeaderCtrl .

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

Parametri

dwExStyle
Specifica lo stile esteso del controllo da creare. Per un elenco degli stili di Windows estesi, vedere il parametro dwExStyle per CreateWindowEx in Windows SDK.

dwStyle
Stile del controllo intestazione. Per una descrizione degli stili di controllo intestazione, vedere Stili di controllo intestazione in Windows SDK. Vedere Creare per un elenco di stili aggiuntivi.

rect
Riferimento a una struttura RECT che descrive le dimensioni e la posizione della finestra da creare, nelle coordinate client di pParentWnd.

pParentWnd
Puntatore alla finestra padre del controllo.

nID
ID finestra figlio del controllo.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Usare CreateEx invece di Create applicare stili di Windows estesi, specificati dalla prefazione dello stile esteso di Windows WS_EX_.

CHeaderCtrl::CreateDragImage

Crea una versione trasparente dell'immagine di un elemento all'interno di un controllo intestazione.

CImageList* CreateDragImage(int nIndex);

Parametri

nIndex
Indice in base zero dell'elemento all'interno del controllo intestazione. L'immagine assegnata a questo elemento è la base per l'immagine trasparente.

Valore restituito

Puntatore a un oggetto CImageList se ha esito positivo; in caso contrario, NULL. L'elenco restituito contiene una sola immagine.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_CREATEDRAGIMAGE, come descritto in Windows SDK. Viene fornito per supportare il trascinamento della selezione dell'elemento di intestazione.

Oggetto CImageList a cui punta il puntatore restituito è un oggetto temporaneo e viene eliminato nella successiva elaborazione inattiva.

CHeaderCtrl::D eleteItem

Elimina un elemento da un controllo intestazione.

BOOL DeleteItem(int nPos);

Parametri

Npos
Specifica l'indice in base zero dell'elemento da eliminare.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Esempio

int nCount = m_myHeaderCtrl.GetItemCount();

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

CHeaderCtrl::D rawItem

Chiamato dal framework quando cambia un aspetto visivo di un controllo intestazione di disegno proprietario.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametri

lpDrawItemStruct
Puntatore a una struttura DRAWITEMSTRUCT che descrive l'elemento da disegnare.

Osservazioni:

Il itemAction membro della DRAWITEMSTRUCT struttura definisce l'azione di disegno da eseguire.

Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Eseguire l'override di questa funzione membro per implementare il disegno per un oggetto di disegno CHeaderCtrl proprietario.

L'applicazione deve ripristinare tutti gli oggetti GDI (Graphics Device Interface) selezionati per il contesto di visualizzazione fornito in lpDrawItemStruct prima che questa funzione membro termini.

Esempio

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

Inizia a modificare il filtro specificato di un controllo intestazione.

BOOL EditFilter(
    int nColumn,
    BOOL bDiscardChanges);

Parametri

nColumn
Colonna da modificare.

bDiscardChanges
Valore che specifica come gestire le modifiche di modifica dell'utente se l'utente sta modificando il filtro quando viene inviato il HDM_EDITFILTER messaggio.

Specificare TRUE per rimuovere le modifiche apportate dall'utente o FAL edizione Standard per accettare le modifiche apportate dall'utente.

Valore restituito

TRUE se questo metodo ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Questo metodo implementa il comportamento del messaggio Win32 HDM_EDITFILTER, come descritto in Windows SDK.

Esempio

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

CHeaderCtrl::GetBitmapMargin

Recupera la larghezza del margine di una bitmap in un controllo intestazione.

int GetBitmapMargin() const;

Valore restituito

Larghezza del margine bitmap in pixel.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_GETBITMAPMARGIN, come descritto in Windows SDK.

Esempio

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

Ottiene l'indice dell'elemento con lo stato attivo nel controllo intestazione corrente.

int GetFocusedItem() const;

Valore restituito

Indice in base zero dell'elemento di intestazione con stato attivo.

Osservazioni:

Questo metodo invia il messaggio HDM_GETFOCUedizione Standard DITEM, descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_headerCtrl, usata per accedere al controllo intestazione corrente. Questa variabile viene usata nell'esempio riportato di seguito.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Nell'esempio di codice seguente vengono illustrati i SetFocusedItem metodi e GetFocusedItem . In una sezione precedente del codice è stato creato un controllo intestazione con cinque colonne. Tuttavia, è possibile trascinare un separatore di colonna in modo che la colonna non sia visibile. L'esempio seguente imposta e quindi conferma l'ultima intestazione di colonna come elemento dello stato attivo.

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

Recupera l'handle di un elenco di immagini utilizzato per gli elementi dell'intestazione di disegno in un controllo intestazione.

CImageList* GetImageList() const;

Valore restituito

Puntatore a un oggetto CImageList .

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_GETIMAGELIST, come descritto in Windows SDK. Oggetto CImageList a cui punta il puntatore restituito è un oggetto temporaneo e viene eliminato nella successiva elaborazione inattiva.

Esempio

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

Recupera informazioni su un elemento del controllo intestazione.

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

Parametri

Npos
Specifica l'indice in base zero dell'elemento da recuperare.

pHeaderItem
Puntatore a una struttura HDITEM che riceve il nuovo elemento. Questa struttura viene utilizzata con le InsertItem funzioni membro e SetItem . Tutti i flag impostati nell'elemento mask assicurano che i valori negli elementi corrispondenti vengano compilati correttamente al momento della restituzione. Se l'elemento mask è impostato su zero, i valori negli altri elementi della struttura non hanno significato.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Esempio

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

Recupera un conteggio degli elementi in un controllo intestazione.

int GetItemCount() const;

Valore restituito

Numero di elementi di controllo intestazione se l'operazione riesce; in caso contrario - 1.

Esempio

Vedere l'esempio per CHeaderCtrl::D eleteItem.

CHeaderCtrl::GetItemDropDownRect

Ottiene il rettangolo di delimitazione del pulsante a discesa per un elemento di intestazione nel controllo intestazione corrente.

BOOL GetItemDropDownRect(
    int iItem,
    LPRECT lpRect) const;

Parametri

iItem
[in] Indice in base zero di un elemento di intestazione il cui stile è HDF_SPLITBUTTON. Per altre informazioni, vedere il fmt membro della struttura HDITEM .

Lprect
[out] Puntatore a una struttura RECT per ricevere le informazioni sul rettangolo di delimitazione.

Valore restituito

TRUE se questa funzione ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Questo metodo invia il messaggio di HDM_GETITEMDROPDOWNRECT descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_headerCtrl, usata per accedere al controllo intestazione corrente. Questa variabile viene usata nell'esempio riportato di seguito.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Nell'esempio di codice successivo viene illustrato il GetItemDropDownRect metodo . In una sezione precedente del codice è stato creato un controllo intestazione con cinque colonne. Nell'esempio di codice seguente viene disegnato un rettangolo 3D intorno alla posizione nella prima colonna riservata al pulsante a discesa dell'intestazione.

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

Recupera il rettangolo di delimitazione per un determinato elemento in un controllo intestazione.

BOOL GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Parametri

nIndex
Indice in base zero dell'elemento del controllo intestazione.

Lprect
Puntatore all'indirizzo di una struttura RECT che riceve le informazioni sul rettangolo di delimitazione.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Questo metodo implementa il comportamento del messaggio Win32 HDM_GETITEMRECT, come descritto in Windows SDK.

CHeaderCtrl::GetOrderArray

Recupera l'ordine da sinistra a destra degli elementi in un controllo intestazione.

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

Parametri

piArray
Puntatore all'indirizzo di un buffer che riceve i valori di indice degli elementi nel controllo intestazione, nell'ordine in cui vengono visualizzati da sinistra a destra.

iCount
Numero di elementi del controllo intestazione. Deve essere non negativo.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_GETORDERARRAY, come descritto in Windows SDK. Viene fornito per supportare l'ordinamento degli elementi di intestazione.

Esempio

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

Ottiene il rettangolo di delimitazione del pulsante di overflow del controllo intestazione corrente.

BOOL GetOverflowRect(LPRECT lpRect) const;

Parametri

Lprect
[out] Puntatore a una struttura RECT che riceve le informazioni sul rettangolo di delimitazione.

Valore restituito

TRUE se questa funzione ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Se il controllo intestazione contiene più elementi di quelli che possono essere visualizzati contemporaneamente, il controllo può visualizzare un pulsante di overflow che scorre verso elementi non visibili. Il controllo intestazione deve avere gli stili HDS_OVERFLOW e HDF_SPLITBUTTON per visualizzare il pulsante di overflow. Il rettangolo di delimitazione racchiude il pulsante di overflow ed esiste solo quando viene visualizzato il pulsante di overflow. Per altre informazioni, vedere Stili di controllo intestazione.

Questo metodo invia il messaggio HDM_GETOVERFLOWRECT , descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_headerCtrl, usata per accedere al controllo intestazione corrente. Questa variabile viene usata nell'esempio riportato di seguito.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Nell'esempio di codice successivo viene illustrato il GetOverflowRect metodo . In una sezione precedente del codice è stato creato un controllo intestazione con cinque colonne. Tuttavia, è possibile trascinare un separatore di colonna in modo che la colonna non sia visibile. Se alcune colonne non sono visibili, il controllo intestazione disegna un pulsante di overflow. Nell'esempio di codice seguente viene disegnato un rettangolo 3D intorno alla posizione del pulsante di overflow.

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

Determina quale elemento di intestazione, se presente, si trova in un punto specificato.

int HitTest(LPHDHITTESTINFO* phdhti);

Parametri

phdhti
[in, out] Puntatore a una struttura HDHITTESTINFO che specifica il punto da testare e riceve i risultati del test.

Valore restituito

Indice in base zero dell'elemento di intestazione, se presente, nella posizione specificata; in caso contrario, -1.

Osservazioni:

Questo metodo invia il messaggio di HDM_HITTEST , descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_headerCtrl, usata per accedere al controllo intestazione corrente. Questa variabile viene usata nell'esempio riportato di seguito.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Nell'esempio di codice successivo viene illustrato il HitTest metodo . In una sezione precedente di questo esempio di codice è stato creato un controllo intestazione con cinque colonne. Tuttavia, è possibile trascinare un separatore di colonna in modo che la colonna non sia visibile. In questo esempio viene segnalato l'indice della colonna se è visibile e -1 se la colonna non è visibile.

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

Inserisce un nuovo elemento in un controllo intestazione in corrispondenza dell'indice specificato.

int InsertItem(
    int nPos,
    HDITEM* phdi);

Parametri

Npos
Indice in base zero dell'elemento da inserire. Se il valore è zero, l'elemento viene inserito all'inizio del controllo intestazione. Se il valore è maggiore del valore massimo, l'elemento viene inserito alla fine del controllo intestazione.

phdi
Puntatore a una struttura HDITEM che contiene informazioni sull'elemento da inserire.

Valore restituito

Indice del nuovo elemento in caso di esito positivo; in caso contrario - 1.

Esempio

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

Recupera le dimensioni e la posizione di un controllo intestazione all'interno di un determinato rettangolo.

BOOL Layout(HDLAYOUT* pHeaderLayout);

Parametri

pHeaderLayout
Puntatore a una struttura HDLAYOUT , che contiene informazioni utilizzate per impostare le dimensioni e la posizione di un controllo intestazione.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Questa funzione viene utilizzata per determinare le dimensioni appropriate per un nuovo controllo intestazione che occupa il rettangolo specificato.

Esempio

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

Recupera il valore di indice per un elemento in base al relativo ordine nel controllo intestazione.

int OrderToIndex(int nOrder) const;

Parametri

nOrder
Ordine in base zero visualizzato nell'elemento nel controllo intestazione, da sinistra a destra.

Valore restituito

Indice dell'elemento, in base al relativo ordine nel controllo intestazione. L'indice viene conteggiato da sinistra a destra, a partire da 0.

Osservazioni:

Questa funzione membro implementa il comportamento della macro Win32 HDM_ORDERTOINDEX, come descritto in Windows SDK. Viene fornito per supportare l'ordinamento degli elementi di intestazione.

CHeaderCtrl::SetBitmapMargin

Imposta la larghezza del margine di una bitmap in un controllo intestazione.

int SetBitmapMargin(int nWidth);

Parametri

nWidth
Larghezza, specificata in pixel, del margine che circonda una bitmap all'interno di un controllo intestazione esistente.

Valore restituito

Larghezza del margine bitmap in pixel.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_edizione Standard TBITMAPMARGIN, come descritto in Windows SDK.

Esempio

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

Imposta l'intervallo di timeout tra il momento in cui viene apportata una modifica negli attributi del filtro e la registrazione di una notifica di HDN_FILTERCHANGE .

int SetFilterChangeTimeout(DWORD dwTimeOut);

Parametri

dwTimeOut
Valore di timeout, espresso in millisecondi.

Valore restituito

Indice del controllo filtro da modificare.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_edizione Standard TFILTERCHANGETIMEOUT, come descritto in Windows SDK.

Esempio

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

Imposta lo stato attivo su un elemento di intestazione specificato nel controllo intestazione corrente.

BOOL SetFocusedItem(int iItem);

Parametri

iItem
[in] Indice in base zero di un elemento di intestazione.

Valore restituito

TRUE se questo metodo ha esito positivo; in caso contrario, FAL edizione Standard.

Osservazioni:

Questo metodo invia il messaggio HDM_edizione Standard TFOCU edizione Standard DITEM, descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_headerCtrl, usata per accedere al controllo intestazione corrente. Questa variabile viene usata nell'esempio riportato di seguito.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Nell'esempio di codice seguente vengono illustrati i SetFocusedItem metodi e GetFocusedItem . In una sezione precedente del codice è stato creato un controllo intestazione con cinque colonne. Tuttavia, è possibile trascinare un separatore di colonna in modo che la colonna non sia visibile. L'esempio seguente imposta e quindi conferma l'ultima intestazione di colonna come elemento dello stato attivo.

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

Modifica il divisore tra gli elementi dell'intestazione per indicare un trascinamento manuale di un elemento di intestazione.

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

Parametri

pt
Posizione del puntatore. Il controllo intestazione evidenzia il divisore appropriato in base alla posizione del puntatore.

nIndex
Indice del divisore evidenziato.

Valore restituito

Indice del divisore evidenziato.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_edizione Standard THOTDIVIDER, come descritto in Windows SDK. Viene fornito per supportare il trascinamento della selezione dell'elemento di intestazione.

Esempio

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

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl::SetImageList

Assegna un elenco di immagini a un controllo intestazione.

CImageList* SetImageList(CImageList* pImageList);

Parametri

pImageList
Puntatore a un CImageList oggetto contenente l'elenco di immagini da assegnare al controllo intestazione.

Valore restituito

Puntatore all'oggetto CImageList precedentemente assegnato al controllo intestazione.

Osservazioni:

Questa funzione membro implementa il comportamento del messaggio Win32 HDM_edizione Standard TIMAGELIST, come descritto in Windows SDK. Oggetto CImageList a cui punta il puntatore restituito è un oggetto temporaneo e viene eliminato nella successiva elaborazione inattiva.

Esempio

Vedere l'esempio per CHeaderCtrl::GetImageList.

CHeaderCtrl::SetItem

Imposta gli attributi dell'elemento specificato in un controllo intestazione.

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

Parametri

Npos
Indice in base zero dell'elemento da modificare.

pHeaderItem
Puntatore a una struttura HDITEM che contiene informazioni sul nuovo elemento.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Esempio

Vedere l'esempio per CHeaderCtrl::GetItem.

CHeaderCtrl::SetOrderArray

Imposta l'ordine da sinistra a destra degli elementi in un controllo intestazione.

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

Parametri

iCount
Numero di elementi del controllo intestazione.

piArray
Puntatore all'indirizzo di un buffer che riceve i valori di indice degli elementi nel controllo intestazione, nell'ordine in cui vengono visualizzati da sinistra a destra.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Questa funzione membro implementa il comportamento della macro Win32 HDM_edizione Standard TORDERARRAY, come descritto in Windows SDK. Viene fornito per supportare l'ordinamento degli elementi di intestazione.

Esempio

Vedere l'esempio per CHeaderCtrl::GetOrderArray.

Vedi anche

Classe CWnd
Grafico della gerarchia
Classe CTabCtrl
Classe CListCtrl
Classe CImageList