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 CHeaderCtrl
di , vedere Controlli e uso di CHeaderCtrl.
Gerarchia di ereditarietà
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, FALSE.
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, FALSE.
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 FALSE per accettare le modifiche apportate dall'utente.
Valore restituito
TRUE se questo metodo ha esito positivo; in caso contrario, FALSE.
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_GETFOCUSEDITEM , 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, FALSE.
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, FALSE.
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_SETBITMAPMARGIN, 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_SETFILTERCHANGETIMEOUT, 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, FALSE.
Osservazioni:
Questo metodo invia il messaggio di HDM_SETFOCUSEDITEM , 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_SETHOTDIVIDER, 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_SETIMAGELIST, 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_SETORDERARRAY, 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