CHeaderCtrl – třída
Poskytuje funkce běžného ovládacího prvku hlavičky systému Windows.
Syntaxe
class CHeaderCtrl : public CWnd
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CHeaderCtrl::CHeaderCtrl | CHeaderCtrl Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CHeaderCtrl::ClearAllFilters | Vymaže všechny filtry pro ovládací prvek záhlaví. |
CHeaderCtrl::ClearFilter | Vymaže filtr pro ovládací prvek záhlaví. |
CHeaderCtrl::Create | Vytvoří ovládací prvek záhlaví a připojí ho k objektu CHeaderCtrl . |
CHeaderCtrl::CreateDragImage | Vytvoří průhlednou verzi obrázku položky v ovládacím prvku záhlaví. |
CHeaderCtrl::CreateEx | Vytvoří ovládací prvek záhlaví se zadanými rozšířenými styly Windows a připojí ho k objektu CListCtrl . |
CHeaderCtrl::D eleteItem | Odstraní položku z ovládacího prvku záhlaví. |
CHeaderCtrl::D rawItem | Nakreslí zadanou položku ovládacího prvku záhlaví. |
CHeaderCtrl::EditFilter | Spustí úpravu zadaného filtru ovládacího prvku záhlaví. |
CHeaderCtrl::GetBitmapMargin | Načte šířku okraje rastrového obrázku v ovládacím prvku záhlaví. |
CHeaderCtrl::GetFocusedItem | Získá identifikátor položky v aktuálním ovládacím prvku záhlaví, který má fokus. |
CHeaderCtrl::GetImageList | Načte popisovač seznamu obrázků použitý pro položky záhlaví výkresu v ovládacím prvku záhlaví. |
CHeaderCtrl::GetItem | Načte informace o položce v ovládacím prvku záhlaví. |
CHeaderCtrl::GetItemCount | Načte počet položek v ovládacím prvku záhlaví. |
CHeaderCtrl::GetItemDropDownRect | Získá ohraničující obdélník informace pro zadané rozevírací tlačítko v ovládacím prvku záhlaví. |
CHeaderCtrl::GetItemRect | Načte ohraničující obdélník pro danou položku v ovládacím prvku záhlaví. |
CHeaderCtrl::GetOrderArray | Načte pořadí položek zleva doprava v ovládacím prvku záhlaví. |
CHeaderCtrl::GetOverflowRect | Získá ohraničující obdélník přetečení tlačítko pro aktuální záhlaví ovládacího prvku. |
CHeaderCtrl::HitTest | Určuje, která položka záhlaví, pokud existuje, je umístěna v zadaném bodě. |
CHeaderCtrl::InsertItem | Vloží novou položku do ovládacího prvku záhlaví. |
CHeaderCtrl::Layout | Načte velikost a umístění ovládacího prvku záhlaví v daném obdélníku. |
CHeaderCtrl::OrderToIndex | Načte hodnotu indexu položky na základě jejího pořadí v ovládacím prvku záhlaví. |
CHeaderCtrl::SetBitmapMargin | Nastaví šířku okraje rastrového obrázku v ovládacím prvku záhlaví. |
CHeaderCtrl::SetFilterChangeTimeout | Nastaví interval časového limitu mezi časem, kdy se změna provede v atributech filtru a zaúčtování HDN_FILTERCHANGE oznámení. |
CHeaderCtrl::SetFocusedItem | Nastaví fokus na zadanou položku záhlaví v aktuálním ovládacím prvku záhlaví. |
CHeaderCtrl::SetHotDivider | Změní rozdělovač mezi položkami záhlaví tak, aby označí ruční přetažení položky záhlaví. |
CHeaderCtrl::SetImageList | Přiřadí seznam obrázků ovládacímu prvku záhlaví. |
CHeaderCtrl::SetItem | Nastaví atributy zadané položky v ovládacím prvku záhlaví. |
CHeaderCtrl::SetOrderArray | Nastaví pořadí položek zleva doprava v ovládacím prvku záhlaví. |
Poznámky
Ovládací prvek záhlaví je okno, které je obvykle umístěné nad sadou sloupců textu nebo čísel. Obsahuje název pro každý sloupec a dá se rozdělit do částí. Uživatel může přetáhnout rozdělovače, které rozdělují části, a nastavit tak šířku každého sloupce. Obrázek ovládacího prvku záhlaví najdete v tématu Ovládací prvky záhlaví.
Tento ovládací prvek (a proto CHeaderCtrl
třída) je k dispozici pouze pro programy, které běží v systému Windows 95/98 a systém Windows NT verze 3.51 a novější.
Mezi funkce přidané pro běžné ovládací prvky systému Windows 95/Internet Explorer 4.0 patří:
Vlastní řazení položek záhlaví
Přetažení položky záhlaví pro přeuspořádání položek záhlaví Při vytváření objektu
CHeaderCtrl
použijte styl HDS_DRAGDROP.Text sloupce záhlaví je při změně velikosti sloupce neustále zobrazitelný. Při vytváření objektu
CHeaderCtrl
použijte styl HDS_FULLDRAG.Sledování horkého záhlaví, které zvýrazní položku záhlaví, když na ni ukazatel najede myší. Při vytváření objektu
CHeaderCtrl
použijte styl HDS_HOTTRACK.Podpora seznamu obrázků Položky záhlaví můžou obsahovat obrázky uložené v objektu
CImageList
nebo textu.
Další informace o použití CHeaderCtrl
naleznete v tématu Ovládací prvky a použití CHeaderCtrl.
Hierarchie dědičnosti
CHeaderCtrl
Požadavky
Hlavička: afxcmn.h
CHeaderCtrl::CHeaderCtrl
CHeaderCtrl
Vytvoří objekt.
CHeaderCtrl();
Příklad
// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;
// Declare a dynamic CHeaderCtrl object.
CHeaderCtrl *pmyHeaderCtrl = new CHeaderCtrl;
CHeaderCtrl::ClearAllFilters
Vymaže všechny filtry pro ovládací prvek záhlaví.
BOOL ClearAllFilters();
Návratová hodnota
TRUE, pokud tato metoda je úspěšná; jinak NEPRAVDA.
Poznámky
Tato metoda implementuje chování zprávy Win32 HDM_CLEARFILTER s hodnotou sloupce -1, jak je popsáno v sadě Windows SDK.
Příklad
m_myHeaderCtrl.ClearAllFilters();
CHeaderCtrl::ClearFilter
Vymaže filtr pro ovládací prvek záhlaví.
BOOL ClearFilter(int nColumn);
Parametry
nSloupcová
Hodnota sloupce označující, který filtr se má vymazat.
Návratová hodnota
TRUE, pokud tato metoda je úspěšná; jinak NEPRAVDA.
Poznámky
Tato metoda implementuje chování zprávy Win32 HDM_CLEARFILTER, jak je popsáno v sadě Windows SDK.
Příklad
int iFilt = m_myHeaderCtrl.ClearFilter(1);
CHeaderCtrl::Create
Vytvoří ovládací prvek záhlaví a připojí ho k objektu CHeaderCtrl
.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametry
dwStyle
Určuje styl ovládacího prvku záhlaví. Popis stylů ovládacích prvků záhlaví naleznete v tématu Styly ovládacích prvků záhlaví v sadě Windows SDK.
Rect
Určuje velikost a umístění ovládacího prvku záhlaví. Může to být objekt CRect nebo struktura RECT .
pParentWnd
Určuje nadřazené okno ovládacího prvku záhlaví, obvykle .CDialog
Nesmí mít hodnotu NULL.
Nid
Určuje ID ovládacího prvku záhlaví.
Návratová hodnota
Nenulové, pokud byla inicializace úspěšná; jinak nula.
Poznámky
Objekt vytvoříte CHeaderCtrl
ve dvou krocích. Nejprve zavolejte konstruktor a potom volání Create
, který vytvoří ovládací prvek záhlaví a připojí ho k objektu CHeaderCtrl
.
Kromě stylů ovládacích prvků záhlaví můžete pomocí následujících běžných stylů ovládacích prvků určit, jak se pozice a změna velikosti ovládacích prvků záhlaví změní (další informace najdete v tématu Běžné styly ovládacích prvků):
CCS_BOTTOM Způsobí, že se ovládací prvek umístí do dolní části klientské oblasti nadřazeného okna a nastaví šířku stejnou jako šířka nadřazeného okna.
CCS_NODIVIDER Zabrání vykreslení dvou pixelů zvýraznění v horní části ovládacího prvku.
CCS_NOMOVEY Způsobí, že ovládací prvek změní velikost a přesune se vodorovně, ale ne svisle, v reakci na zprávu WM_SIZE. Pokud se použije styl CCS_NORESIZE, tento styl se nepoužije. Ovládací prvky záhlaví mají ve výchozím nastavení tento styl.
CCS_NOPARENTALIGN Zabrání automatickému přechodu ovládacího prvku do horní nebo dolní části nadřazeného okna. Místo toho ovládací prvek zachová jeho pozici v nadřazené okně i přes změny velikosti nadřazeného okna. Pokud se použije také styl CCS_TOP nebo CCS_BOTTOM, výška se upraví na výchozí, ale pozice a šířka zůstanou beze změny.
CCS_NORESIZE Zabrání ovládacímu prvku použít výchozí šířku a výšku při nastavování počáteční velikosti nebo nové velikosti. Místo toho ovládací prvek používá šířku a výšku zadanou v požadavku pro vytvoření nebo změnu velikosti.
CCS_TOP Způsobí, že se ovládací prvek umístí do horní části klientské oblasti nadřazeného okna a nastaví šířku stejnou jako šířka nadřazeného okna.
U ovládacího prvku záhlaví můžete použít také následující styly oken (další informace najdete v tématu Styly oken):
WS_CHILD Vytvoří podřízené okno. Nelze použít se stylem WS_POPUP.
WS_VISIBLE Vytvoří okno, které je zpočátku viditelné.
WS_DISABLED Vytvoří okno, které je původně zakázáno.
WS_GROUP Určuje první ovládací prvek skupiny ovládacích prvků, ve kterých může uživatel přejít z jednoho ovládacího prvku na další pomocí kláves se šipkami. Všechny ovládací prvky definované stylem WS_GROUP po prvním ovládacím prvku patří do stejné skupiny. Další ovládací prvek se stylem WS_GROUP ukončí skupinu stylů a spustí další skupinu (to znamená, že jedna skupina končí tam, kde začíná další).
WS_TABSTOP Určuje jeden z libovolných ovládacích prvků, kterými se uživatel může pohybovat pomocí klávesy TAB. Klávesa TAB přesune uživatele na další ovládací prvek určený stylem WS_TABSTOP.
Chcete-li použít rozšířené styly oken s ovládacím prvek, volání CreateEx místo Create
.
Příklad
// 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
Vytvoří ovládací prvek (podřízené okno) a přidruží ho k objektu CHeaderCtrl
.
virtual BOOL CreateEx(
DWORD dwExStyle,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametry
dwExStyle
Určuje rozšířený styl vytvářeného ovládacího prvku. Seznam rozšířených stylů Windows naleznete v části dwExStyle parametr pro CreateWindowEx v sadě Windows SDK.
dwStyle
Styl ovládacího prvku záhlaví. Popis stylů ovládacích prvků záhlaví naleznete v tématu Styly ovládacích prvků záhlaví v sadě Windows SDK. Viz Vytvoření seznamu dalších stylů.
Rect
Odkaz na strukturu RECT popisující velikost a umístění okna, které se má vytvořit, v souřadnicích klienta pParentWnd.
pParentWnd
Ukazatel na okno, které je nadřazeným objektem ovládacího prvku.
Nid
ID podřízeného okna ovládacího prvku.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Create
Místo CreateEx
použití rozšířených stylů Windows určených před WS_EX_ rozšířeného stylu Windows.
CHeaderCtrl::CreateDragImage
Vytvoří průhlednou verzi obrázku položky v ovládacím prvku záhlaví.
CImageList* CreateDragImage(int nIndex);
Parametry
nIndex
Index položky založené na nule v ovládacím prvku záhlaví. Obrázek přiřazený k této položce je základem průhledného obrázku.
Návratová hodnota
Ukazatel na objekt CImageList v případě úspěchu; jinak NULL. Vrácený seznam obsahuje pouze jeden obrázek.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_CREATEDRAGIMAGE, jak je popsáno v sadě Windows SDK. Poskytuje se pro podporu přetahování položek záhlaví.
Objekt CImageList
, na který vrácený ukazatel odkazuje, je dočasným objektem a v dalším zpracování nečinnosti se odstraní.
CHeaderCtrl::D eleteItem
Odstraní položku z ovládacího prvku záhlaví.
BOOL DeleteItem(int nPos);
Parametry
NPos
Určuje nulový index položky, který se má odstranit.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Příklad
int nCount = m_myHeaderCtrl.GetItemCount();
// Delete all of the items.
for (int i = 0; i < nCount; i++)
{
m_myHeaderCtrl.DeleteItem(0);
}
CHeaderCtrl::D rawItem
Volá se architekturou, když se změní vizuální aspekt ovládacího prvku záhlaví pro kreslení vlastníka.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametry
lpDrawItem – struktura
Ukazatel na strukturu DRAWITEMSTRUCT popisující položku, která má být vykreslena.
Poznámky
Člen itemAction
DRAWITEMSTRUCT
struktury definuje akci výkresu, která se má provést.
Ve výchozím nastavení tato členová funkce nic nedělá. Přepište tuto členovou funkci tak, aby implementovaly výkres pro objekt pro kreslení CHeaderCtrl
vlastníka.
Aplikace by měla obnovit všechny objekty rozhraní grafického zařízení (GDI) vybrané pro kontext zobrazení zadaný v lpDrawItemStruct před ukončením této členské funkce.
Příklad
// 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
Začne upravovat zadaný filtr ovládacího prvku záhlaví.
BOOL EditFilter(
int nColumn,
BOOL bDiscardChanges);
Parametry
nSloupcová
Sloupec, který chcete upravit.
bDiscardChanges
Hodnota, která určuje, jak zpracovat změny úprav uživatele, pokud je uživatel v procesu úprav filtru při odeslání HDM_EDITFILTER zprávy.
Chcete-li zahodit změny provedené uživatelem, zadejte hodnotu TRUE, pokud chcete přijmout změny provedené uživatelem.
Návratová hodnota
TRUE, pokud tato metoda je úspěšná; jinak NEPRAVDA.
Poznámky
Tato metoda implementuje chování zprávy Win32 HDM_EDITFILTER, jak je popsáno v sadě Windows SDK.
Příklad
int iFilter = m_myHeaderCtrl.EditFilter(1, TRUE);
CHeaderCtrl::GetBitmapMargin
Načte šířku okraje rastrového obrázku v ovládacím prvku záhlaví.
int GetBitmapMargin() const;
Návratová hodnota
Šířka okraje rastrového obrázku v pixelech.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_GETBITMAPMARGIN, jak je popsáno v sadě Windows SDK.
Příklad
int iMargin = m_myHeaderCtrl.GetBitmapMargin();
CHeaderCtrl::GetFocusedItem
Získá index položky, která má fokus v aktuálním záhlaví ovládacího prvku.
int GetFocusedItem() const;
Návratová hodnota
Index záhlaví s nulovým indexem položky, která má fokus.
Poznámky
Tato metoda odešle HDM_GETFOCUSEDITEM zprávu, která je popsaná v sadě Windows SDK.
Příklad
První příklad kódu definuje proměnnou , m_headerCtrl
která se používá pro přístup k aktuálnímu ovládacímu prvku záhlaví. Tato proměnná se používá v dalším příkladu.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
Následující příklad kódu ukazuje metody SetFocusedItem
a GetFocusedItem
metody. V dřívější části kódu jsme vytvořili ovládací prvek záhlaví s pěti sloupci. Oddělovač sloupců ale můžete přetáhnout tak, aby nebyl viditelný. Následující příklad nastaví a pak potvrdí záhlaví posledního sloupce jako položku fokusu.
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
Načte popisovač seznamu obrázků použitý pro položky záhlaví výkresu v ovládacím prvku záhlaví.
CImageList* GetImageList() const;
Návratová hodnota
Ukazatel na objekt CImageList .
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_GETIMAGELIST, jak je popsáno v sadě Windows SDK. Objekt CImageList
, na který vrácený ukazatel odkazuje, je dočasným objektem a v dalším zpracování nečinnosti se odstraní.
Příklad
// 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
Načte informace o položce ovládacího prvku záhlaví.
BOOL GetItem(
int nPos,
HDITEM* pHeaderItem) const;
Parametry
NPos
Určuje index položky založený na nule, který se má načíst.
pHeaderItem
Ukazatel na strukturu HDITEM , která přijímá novou položku. Tato struktura se používá s členskými funkcemiInsertItem
.SetItem
Všechny příznaky nastavené v elementu mask
zajišťují, aby hodnoty v odpovídajících prvcích byly správně vyplněny při vrácení. Pokud je prvek nastaven na nulu mask
, hodnoty v ostatních elementech struktury jsou nesmyslné.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Příklad
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
Načte počet položek v ovládacím prvku záhlaví.
int GetItemCount() const;
Návratová hodnota
Počet položek ovládacího prvku záhlaví v případě úspěchu; jinak - 1.
Příklad
Podívejte se na příklad pro CHeaderCtrl::D eleteItem.
CHeaderCtrl::GetItemDropDownRect
Získá ohraničující obdélník rozevíracího tlačítka pro položku záhlaví v aktuálním ovládacím prvku záhlaví.
BOOL GetItemDropDownRect(
int iItem,
LPRECT lpRect) const;
Parametry
iItem
[v] Index záhlaví, jehož styl je HDF_SPLITBUTTON, je index založený na nule. Další informace najdete v fmt
členu struktury HDITEM .
lpRect
[ven] Ukazatel na strukturu RECT pro příjem ohraničující informace o obdélníku.
Návratová hodnota
TRUE, pokud je tato funkce úspěšná; jinak NEPRAVDA.
Poznámky
Tato metoda odešle HDM_GETITEMDROPDOWNRECT zprávu, která je popsaná v sadě Windows SDK.
Příklad
První příklad kódu definuje proměnnou , m_headerCtrl
která se používá pro přístup k aktuálnímu ovládacímu prvku záhlaví. Tato proměnná se používá v dalším příkladu.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
Následující příklad kódu ukazuje metodu GetItemDropDownRect
. V dřívější části kódu jsme vytvořili ovládací prvek záhlaví s pěti sloupci. Následující příklad kódu nakreslí 3D obdélník kolem umístění v prvním sloupci, který je vyhrazený pro tlačítko rozevíracího seznamu záhlaví.
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
Načte ohraničující obdélník pro danou položku v ovládacím prvku záhlaví.
BOOL GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parametry
nIndex
Nulový index položky ovládacího prvku záhlaví.
lpRect
Ukazatel na adresu struktury RECT , která přijímá ohraničující informace o obdélníku.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Tato metoda implementuje chování zprávy Win32 HDM_GETITEMRECT, jak je popsáno v sadě Windows SDK.
CHeaderCtrl::GetOrderArray
Načte pořadí položek zleva doprava v ovládacím prvku záhlaví.
BOOL GetOrderArray(
LPINT piArray,
int iCount);
Parametry
piArray
Ukazatel na adresu vyrovnávací paměti, která přijímá hodnoty indexu položek v ovládacím prvku záhlaví v pořadí, v jakém se zobrazují zleva doprava.
iCount
Počet položek ovládacího prvku záhlaví. Musí být nezáporná.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_GETORDERARRAY, jak je popsáno v sadě Windows SDK. Poskytuje se pro podporu řazení položek záhlaví.
Příklad
// 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
Získá ohraničující obdélník tlačítka přetečení aktuálního ovládacího prvku záhlaví.
BOOL GetOverflowRect(LPRECT lpRect) const;
Parametry
lpRect
[ven] Ukazatel na strukturu RECT , která přijímá ohraničující informace o obdélníku.
Návratová hodnota
TRUE, pokud je tato funkce úspěšná; jinak NEPRAVDA.
Poznámky
Pokud ovládací prvek záhlaví obsahuje více položek, než lze současně zobrazit, může ovládací prvek zobrazit tlačítko přetečení, které se posune na položky, které nejsou viditelné. Ovládací prvek záhlaví musí mít styly HDS_OVERFLOW a HDF_SPLITBUTTON, aby se zobrazilo tlačítko přetečení. Ohraničující obdélník uzavře tlačítko přetečení a existuje pouze v případě, že se zobrazí tlačítko přetečení. Další informace naleznete v tématu Styly ovládacích prvků záhlaví.
Tato metoda odešle HDM_GETOVERFLOWRECT zprávu, která je popsaná v sadě Windows SDK.
Příklad
První příklad kódu definuje proměnnou , m_headerCtrl
která se používá pro přístup k aktuálnímu ovládacímu prvku záhlaví. Tato proměnná se používá v dalším příkladu.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
Následující příklad kódu ukazuje metodu GetOverflowRect
. V dřívější části kódu jsme vytvořili ovládací prvek záhlaví s pěti sloupci. Oddělovač sloupců ale můžete přetáhnout tak, aby nebyl viditelný. Pokud některé sloupce nejsou viditelné, ovládací prvek záhlaví nakreslí tlačítko přetečení. Následující příklad kódu nakreslí 3D obdélník kolem umístění tlačítka přetečení.
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
Určuje, která položka záhlaví, pokud existuje, je umístěna v zadaném bodě.
int HitTest(LPHDHITTESTINFO* phdhti);
Parametry
phdhti
[in, out] Ukazatel na strukturu HDHITTESTINFO , která určuje bod pro testování a přijímá výsledky testu.
Návratová hodnota
Index záhlaví položky založené na nule, pokud existuje, na zadané pozici; jinak, -1.
Poznámky
Tato metoda odešle HDM_HITTEST zprávu, která je popsaná v sadě Windows SDK.
Příklad
První příklad kódu definuje proměnnou , m_headerCtrl
která se používá pro přístup k aktuálnímu ovládacímu prvku záhlaví. Tato proměnná se používá v dalším příkladu.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
Následující příklad kódu ukazuje metodu HitTest
. V předchozí části tohoto příkladu kódu jsme vytvořili ovládací prvek záhlaví s pěti sloupci. Oddělovač sloupců ale můžete přetáhnout tak, aby nebyl viditelný. Tento příklad hlásí index sloupce, pokud je viditelný, a -1, pokud sloupec není viditelný.
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
Vloží novou položku do ovládacího prvku záhlaví v zadaném indexu.
int InsertItem(
int nPos,
HDITEM* phdi);
Parametry
NPos
Index položky, který se má vložit, je založený na nule. Pokud je hodnota nula, položka se vloží na začátek ovládacího prvku záhlaví. Pokud je hodnota větší než maximální hodnota, položka se vloží na konec ovládacího prvku záhlaví.
Phdi
Ukazatel na strukturu HDITEM , která obsahuje informace o položce, kterou chcete vložit.
Návratová hodnota
Index nové položky v případě úspěchu; jinak - 1.
Příklad
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
Načte velikost a umístění ovládacího prvku záhlaví v daném obdélníku.
BOOL Layout(HDLAYOUT* pHeaderLayout);
Parametry
pHeaderLayout
Ukazatel na strukturu HDLAYOUT , která obsahuje informace použité k nastavení velikosti a umístění ovládacího prvku záhlaví.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Tato funkce slouží k určení vhodných dimenzí pro nový ovládací prvek záhlaví, který má zabírat daný obdélník.
Příklad
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
Načte hodnotu indexu položky na základě jejího pořadí v ovládacím prvku záhlaví.
int OrderToIndex(int nOrder) const;
Parametry
nObjednávky
Pořadí založené na nule, které se položka zobrazí v ovládacím prvku záhlaví, zleva doprava.
Návratová hodnota
Index položky na základě jeho pořadí v ovládacím prvku záhlaví. Index se počítá zleva doprava, počínaje 0.
Poznámky
Tato členová funkce implementuje chování HDM_ORDERTOINDEX makra Win32, jak je popsáno v sadě Windows SDK. Poskytuje se pro podporu řazení položek záhlaví.
CHeaderCtrl::SetBitmapMargin
Nastaví šířku okraje rastrového obrázku v ovládacím prvku záhlaví.
int SetBitmapMargin(int nWidth);
Parametry
nWidth
Šířka, zadaná v pixelech, okraje, který obklopuje rastrový obrázek v rámci existujícího ovládacího prvku záhlaví.
Návratová hodnota
Šířka okraje rastrového obrázku v pixelech.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_SETBITMAPMARGIN, jak je popsáno v sadě Windows SDK.
Příklad
int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);
CHeaderCtrl::SetFilterChangeTimeout
Nastaví interval časového limitu mezi časem, kdy se změna provede v atributech filtru a zaúčtování oznámení HDN_FILTERCHANGE .
int SetFilterChangeTimeout(DWORD dwTimeOut);
Parametry
dwTimeOut
Hodnota časového limitu v milisekundách
Návratová hodnota
Index ovládacího prvku filtru, který se upravuje.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_SETFILTERCHANGETIMEOUT, jak je popsáno v sadě Windows SDK.
Příklad
int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);
CHeaderCtrl::SetFocusedItem
Nastaví fokus na zadanou položku záhlaví v aktuálním ovládacím prvku záhlaví.
BOOL SetFocusedItem(int iItem);
Parametry
iItem
[v] Index položky záhlaví založený na nule
Návratová hodnota
TRUE, pokud tato metoda je úspěšná; jinak NEPRAVDA.
Poznámky
Tato metoda odešle HDM_SETFOCUSEDITEM zprávu, která je popsaná v sadě Windows SDK.
Příklad
První příklad kódu definuje proměnnou , m_headerCtrl
která se používá pro přístup k aktuálnímu ovládacímu prvku záhlaví. Tato proměnná se používá v dalším příkladu.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
Následující příklad kódu ukazuje metody SetFocusedItem
a GetFocusedItem
metody. V dřívější části kódu jsme vytvořili ovládací prvek záhlaví s pěti sloupci. Oddělovač sloupců ale můžete přetáhnout tak, aby nebyl viditelný. Následující příklad nastaví a pak potvrdí záhlaví posledního sloupce jako položku fokusu.
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
Změní rozdělovač mezi položkami záhlaví tak, aby označí ruční přetažení položky záhlaví.
int SetHotDivider(CPoint pt);
int SetHotDivider(int nIndex);
Parametry
Pt
Pozice ukazatele. Ovládací prvek záhlaví zvýrazní příslušný rozdělovač na základě pozice ukazatele.
nIndex
Index zvýrazněného oddělovače.
Návratová hodnota
Index zvýrazněného oddělovače.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_SETHOTDIVIDER, jak je popsáno v sadě Windows SDK. Poskytuje se pro podporu přetahování položek záhlaví.
Příklad
void CMyHeaderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
SetHotDivider(point);
CHeaderCtrl::OnMouseMove(nFlags, point);
}
CHeaderCtrl::SetImageList
Přiřadí seznam obrázků ovládacímu prvku záhlaví.
CImageList* SetImageList(CImageList* pImageList);
Parametry
pImageList
Ukazatel na CImageList
objekt obsahující seznam obrázků, který se má přiřadit ovládacímu prvku záhlaví.
Návratová hodnota
Ukazatel na objekt CImageList dříve přiřazený k ovládacímu prvku záhlaví.
Poznámky
Tato členová funkce implementuje chování zprávy Win32 HDM_SETIMAGELIST, jak je popsáno v sadě Windows SDK. Objekt CImageList
, na který vrácený ukazatel odkazuje, je dočasným objektem a v dalším zpracování nečinnosti se odstraní.
Příklad
Podívejte se na příklad pro CHeaderCtrl::GetImageList.
CHeaderCtrl::SetItem
Nastaví atributy zadané položky v ovládacím prvku záhlaví.
BOOL SetItem(
int nPos,
HDITEM* pHeaderItem);
Parametry
NPos
Index položky, který má být manipulován s nulovou hodnotou.
pHeaderItem
Ukazatel na strukturu HDITEM , která obsahuje informace o nové položce.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Příklad
Podívejte se na příklad pro CHeaderCtrl::GetItem.
CHeaderCtrl::SetOrderArray
Nastaví pořadí položek zleva doprava v ovládacím prvku záhlaví.
BOOL SetOrderArray(
int iCount,
LPINT piArray);
Parametry
iCount
Počet položek ovládacího prvku záhlaví.
piArray
Ukazatel na adresu vyrovnávací paměti, která přijímá hodnoty indexu položek v ovládacím prvku záhlaví v pořadí, v jakém se zobrazují zleva doprava.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Tato členová funkce implementuje chování HDM_SETORDERARRAY makra Win32, jak je popsáno v sadě Windows SDK. Poskytuje se pro podporu řazení položek záhlaví.
Příklad
Podívejte se na příklad pro CHeaderCtrl::GetOrderArray.
Viz také
CWnd – třída
Graf hierarchie
CTabCtrl – třída
CListCtrl – třída
CImageList – třída