分享方式:


CHeaderCtrl 類別

提供 Windows 通用標頭控制項的功能。

語法

class CHeaderCtrl : public CWnd

成員

公用建構函式

名稱 描述
CHeaderCtrl::CHeaderCtrl 建構 CHeaderCtrl 物件。

公用方法

名稱 描述
CHeaderCtrl::ClearAllFilters 清除標頭控制項的所有篩選。
CHeaderCtrl::ClearFilter 清除標頭控制項的篩選。
CHeaderCtrl::Create 建立標頭控制項,並將它附加至 CHeaderCtrl 物件。
CHeaderCtrl::CreateDragImage 在標頭控制項中建立專案的影像透明版本。
CHeaderCtrl::CreateEx 使用指定的 Windows 擴充樣式建立標頭控制項,並將它附加至 CListCtrl 物件。
CHeaderCtrl::D eleteItem 從標頭控制項刪除專案。
CHeaderCtrl::D rawItem 繪製標題控制項的指定專案。
CHeaderCtrl::EditFilter 開始編輯標頭控制項的指定篩選。
CHeaderCtrl::GetBitmapMargin 擷取標頭控制項中點陣圖邊界的寬度。
CHeaderCtrl::GetFocusedItem 取得目前標頭控制項中具有焦點的專案識別碼。
CHeaderCtrl::GetImageList 擷取用於在標頭控制項中繪製標題專案的影像清單控制碼。
CHeaderCtrl::GetItem 擷取標頭控制項中專案的相關資訊。
CHeaderCtrl::GetItemCount 擷取標頭控制項中的專案計數。
CHeaderCtrl::GetItemDropDownRect 取得標頭控制項中指定下拉式按鈕的周框資訊。
CHeaderCtrl::GetItemRect 擷取標頭控制項中指定專案的周框。
CHeaderCtrl::GetOrderArray 擷取標頭控制項中專案的由左至右順序。
CHeaderCtrl::GetOverflowRect 取得目前標頭控制項溢位按鈕的周框。
CHeaderCtrl::HitTest 判斷哪個標頭專案,如果有的話,位於指定的點。
CHeaderCtrl::InsertItem 將新專案插入標頭控制項。
CHeaderCtrl::Layout 擷取指定矩形內標頭控制項的大小和位置。
CHeaderCtrl::OrderToIndex 根據專案在標頭控制項中的順序擷取專案的索引值。
CHeaderCtrl::SetBitmapMargin 設定標頭控制項中點陣圖邊界的寬度。
CHeaderCtrl::SetFilterChangeTimeout 設定變更在篩選屬性和通知張貼 HDN_FILTERCHANGE 之間的逾時間隔。
CHeaderCtrl::SetFocusedItem 將焦點設定為目前標頭控制項中的指定標題專案。
CHeaderCtrl::SetHotDivider 變更標頭專案之間的分隔符號,以指出標題專案的手動拖放。
CHeaderCtrl::SetImageList 將影像清單指派給標頭控制項。
CHeaderCtrl::SetItem 設定標頭控制項中指定專案的屬性。
CHeaderCtrl::SetOrderArray 設定標頭控制項中專案的由左至右順序。

備註

標頭控制項是一個視窗,通常位於一組文字或數位的資料行上方。 它包含每個資料行的標題,而且可以分割成部分。 使用者可以拖曳分隔區,以設定每個資料行的寬度。 如需標題控制項的圖例,請參閱 標頭控制項

此控制項(因此類別 CHeaderCtrl )僅適用于在 Windows 95/98 和 Windows NT 3.51 版和更新版本下執行的程式。

Windows 95/Internet Explorer 4.0 通用控制項新增的功能包括:

  • 標頭專案自訂排序。

  • 標題專案拖放,用於重新排序標題專案。 當您建立 CHeaderCtrl 物件時,請使用HDS_DRAGDROP樣式。

  • 在資料行調整大小期間,標題列文字會持續檢視。 當您建立 CHeaderCtrl 物件時,請使用HDS_FULLDRAG樣式。

  • 標頭熱追蹤,會在指標暫留在標頭專案上方時醒目提示標頭專案。 當您建立 CHeaderCtrl 物件時,請使用HDS_HOTTRACK樣式。

  • 映射清單支援。 標頭專案可以包含儲存在物件或文字中的 CImageList 影像。

如需使用 CHeaderCtrl 的詳細資訊,請參閱 控制項 和使用 CHeaderCtrl

繼承階層架構

CObject

CCmdTarget

CWnd

CHeaderCtrl

需求

標頭: afxcmn.h

CHeaderCtrl::CHeaderCtrl

建構 CHeaderCtrl 物件。

CHeaderCtrl();

範例

// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;

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

CHeaderCtrl::ClearAllFilters

清除標頭控制項的所有篩選。

BOOL ClearAllFilters();

傳回值

如果此方法成功,則為 TRUE;否則為 FALSE。

備註

此方法會實作 Win32 訊息 HDM_CLEARFILTER 的行為,其資料行值為 -1,如 Windows SDK 中所述。

範例

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

清除標頭控制項的篩選。

BOOL ClearFilter(int nColumn);

參數

nColumn
資料行值,指出要清除的篩選。

傳回值

如果此方法成功,則為 TRUE;否則為 FALSE。

備註

此方法會實作 Win32 訊息 HDM_CLEARFILTER 的行為,如 Windows SDK 中所述。

範例

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

建立標頭控制項,並將它附加至 CHeaderCtrl 物件。

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

參數

dwStyle
指定標頭控制項的樣式。 如需標頭控制項樣式的描述,請參閱 Windows SDK 中的標頭控制項樣式

矩形
指定標頭控制項的大小和位置。 它可以是 CRect 物件或 RECT 結構。

pParentWnd
指定標頭控制項的父視窗,通常是 CDialog 。 它不得為 Null。

nID
指定標頭控制項的識別碼。

傳回值

如果初始化成功,則為非零;否則為零。

備註

您會在兩個步驟中建構 CHeaderCtrl 物件。 首先,呼叫 建構函式,然後呼叫 Create ,這會建立標頭控制項並將它附加至 CHeaderCtrl 物件。

除了標頭控制項樣式之外,您還可以使用下列通用控制項樣式來決定標頭控制項如何定位及調整本身的大小(如需詳細資訊,請參閱 通用控制項樣式 ):

  • CCS_BOTTOM 讓控制項將本身放置在父視窗工作區的底部,並將寬度設定為與父視窗的寬度相同。

  • CCS_NODIVIDER防止在控制項頂端繪製兩圖元的醒目提示。

  • CCS_NOMOVEY 會導致控制項水準調整並移動本身,但不垂直,以回應WM_SIZE訊息。 如果使用CCS_NORESIZE樣式,則不適用此樣式。 標頭控制項預設有此樣式。

  • CCS_NOPARENTALIGN 防止控制項自動移至父視窗的頂端或底部。 相反地,控制項會將其位置保留在父視窗內,儘管變更了父視窗的大小。 如果使用CCS_TOP或CCS_BOTTOM樣式,高度會調整為預設值,但位置和寬度保持不變。

  • CCS_NORESIZE 設定其初始大小或新大小時,防止控制項使用預設寬度和高度。 相反地,控制項會使用建立或調整大小的要求中指定的寬度和高度。

  • CCS_TOP 讓控制項將本身放在父視窗工作區的頂端,並將寬度設定為與父視窗的寬度相同。

您也可以將下列視窗樣式套用至標頭控制項(如需詳細資訊,請參閱 視窗樣式 ):

  • WS_CHILD建立子視窗。 無法搭配WS_POPUP樣式使用。

  • WS_VISIBLE建立一開始可見的視窗。

  • WS_DISABLED建立一開始停用的視窗。

  • WS_GROUP 指定使用者可以使用方向鍵從一個控制項移至下一個控制項之控制項群組的第一個控制項。 第一個控制項屬於同一個群組之後,以WS_GROUP樣式定義的所有控制項。 下一個具有WS_GROUP樣式的控制項會結束樣式群組,並啟動下一個群組(也就是下一個群組會在下一個群組開始的地方結束)。

  • WS_TABSTOP 指定使用者可以使用 TAB 鍵移動的任意數目控制項之一。 TAB 鍵會將使用者移至WS_TABSTOP樣式指定的下一個控制項。

如果您想要搭配控制項使用延伸視窗樣式,請呼叫 CreateEx 而非 Create

範例

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

建立控制項(子視窗),並將它與 CHeaderCtrl 物件產生關聯。

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

參數

dwExStyle
指定要建立之控制項的擴充樣式。 如需擴充 Windows 樣式的清單,請參閱 Windows SDK 中 CreateWindowEx 的 dwExStyle 參數

dwStyle
標頭控制項的樣式。 如需標頭控制項樣式的描述,請參閱 Windows SDK 中的標頭控制項樣式 。 如需其他樣式的清單,請參閱 建立

矩形
RECT 結構的參考 ,描述要建立之視窗的大小和位置,在 pParentWnd 的用戶端座標中

pParentWnd
控制項父系之視窗的指標。

nID
控制項的子視窗識別碼。

傳回值

如果成功則為非零;否則為 0。

備註

使用 CreateEx 而不是 Create 套用擴充的 Windows 樣式,由 Windows 擴充樣式前文 WS_EX_指定。

CHeaderCtrl::CreateDragImage

在標頭控制項中建立專案的影像透明版本。

CImageList* CreateDragImage(int nIndex);

參數

nIndex
標頭控制項內專案之以零起始的索引。 指派給此專案的影像是透明影像的基礎。

傳回值

如果成功,則為 CImageList 物件的指標,否則為 Null。 傳回的清單只包含一個影像。

備註

此成員函式會實作 Win32 訊息 HDM_CREATEDRAGIMAGE 的行為,如 Windows SDK 中所述。 它提供以支援標題專案拖放。

CImageList 回指標點所在的物件是暫存物件,並在下一個閒置時間處理中刪除。

CHeaderCtrl::D eleteItem

從標頭控制項刪除專案。

BOOL DeleteItem(int nPos);

參數

nPos
指定要刪除之專案之以零起始的索引。

傳回值

如果成功則為非零;否則為 0。

範例

int nCount = m_myHeaderCtrl.GetItemCount();

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

CHeaderCtrl::D rawItem

當擁有者繪製標頭控制項的視覺層面變更時,由架構呼叫。

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

參數

lpDrawItemStruct
DRAWITEMSTRUCT 結構的指標 ,描述要繪製的專案。

備註

結構 itemAction 的成員 DRAWITEMSTRUCT 會定義要執行的繪圖動作。

根據預設,此成員函式不會執行任何動作。 覆寫這個成員函式,以實作擁有者繪製物件的繪圖 CHeaderCtrl

應用程式應該還原針對 lpDrawItemStruct 提供的顯示內容選取的所有圖形裝置介面 (GDI) 物件,然後這個成員函式終止。

範例

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

開始編輯標頭控制項的指定篩選。

BOOL EditFilter(
    int nColumn,
    BOOL bDiscardChanges);

參數

nColumn
要編輯的資料行。

bDiscardChanges
值,指定當使用者在傳送HDM_EDITFILTER 訊息時 編輯篩選程式時,如何處理使用者的編輯變更。

指定 TRUE 以捨棄使用者所做的變更,或指定 FALSE 以接受使用者所做的變更。

傳回值

如果此方法成功,則為 TRUE;否則為 FALSE。

備註

此方法會實作 Win32 訊息 HDM_EDITFILTER 的行為,如 Windows SDK 中所述。

範例

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

CHeaderCtrl::GetBitmapMargin

擷取標頭控制項中點陣圖邊界的寬度。

int GetBitmapMargin() const;

傳回值

點陣圖邊界的寬度,以圖元為單位。

備註

此成員函式會實作 Win32 訊息 HDM_GETBITMAPMARGIN 的行為,如 Windows SDK 中所述。

範例

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

取得目前標頭控制項中具有焦點之專案的索引。

int GetFocusedItem() const;

傳回值

具有焦點之標頭專案的以零起始的索引。

備註

這個方法會 傳送 windows SDK 中所述的HDM_GETFOCUSEDITEM 訊息。

範例

第一個程式碼範例會定義 用來存取目前標頭控制項的 變數 m_headerCtrl 。 下一個範例中會使用此變數。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

下一個程式碼範例示範 SetFocusedItemGetFocusedItem 方法。 在程式碼的先前區段中,我們建立了具有五個數據行的標頭控制項。 不過,您可以拖曳資料行分隔符號,讓資料行看不到。 下列範例會設定最後一個資料行標頭做為焦點專案。

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

擷取用於在標頭控制項中繪製標題專案的影像清單控制碼。

CImageList* GetImageList() const;

傳回值

CImageList 物件的指標

備註

此成員函式會實作 Win32 訊息 HDM_GETIMAGELIST 的行為,如 Windows SDK 中所述。 傳 CImageList 回指標點所在的物件是暫存物件,並在下一個閒置時間處理中刪除。

範例

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

擷取標頭控制項專案的相關資訊。

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

參數

nPos
指定要擷取之專案之以零起始的索引。

pHeaderItem
接收新專案的 HDITEM 結構的指標。 這個結構會與 和 SetItem 成員函式搭配 InsertItem 使用。 元素中 mask 設定的任何旗標,可確保在傳回時正確填入對應元素中的值。 如果元素 mask 設定為零,則其他結構元素中的值毫無意義。

傳回值

如果成功則為非零;否則為 0。

範例

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

擷取標頭控制項中的專案計數。

int GetItemCount() const;

傳回值

成功時標頭控制項專案的數目;否則 - 1。

範例

請參閱 CHeaderCtrl::D eleteItem 的範例

CHeaderCtrl::GetItemDropDownRect

取得目前標題控制項中標題專案的下拉式按鈕周框。

BOOL GetItemDropDownRect(
    int iItem,
    LPRECT lpRect) const;

參數

iItem
[in]標題專案的以零起始的索引,其樣式為HDF_SPLITBUTTON。 如需詳細資訊,請參閱 fmt HDITEM 結構的成員

lpRect
[out] 要接收周框資訊的 RECT 結構的指標。

傳回值

如果此函式成功,則為 TRUE;否則為 FALSE。

備註

這個方法會傳送 windows SDK 中所述的 HDM_GETITEMDROPDOWNRECT訊息。

範例

第一個程式碼範例會定義 用來存取目前標頭控制項的 變數 m_headerCtrl 。 下一個範例中會使用此變數。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

下一個程式碼範例示範 GetItemDropDownRect 方法。 在程式碼的先前區段中,我們建立了具有五個數據行的標頭控制項。 下列程式碼範例會在保留給標頭下拉式按鈕的第一個資料行位置周圍繪製 3D 矩形。

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

擷取標頭控制項中指定專案的周框。

BOOL GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

參數

nIndex
標頭控制項專案的以零起始的索引。

lpRect
接收周框資訊的 RECT 結構的位址 指標。

傳回值

如果成功則為非零;否則為 0。

備註

此方法會實作 Win32 訊息 HDM_GETITEMRECT 的行為,如 Windows SDK 中所述。

CHeaderCtrl::GetOrderArray

擷取標頭控制項中專案的由左至右順序。

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

參數

piArray
緩衝區位址的指標,接收標頭控制項中專案的索引值,依它們從左至右出現的順序。

iCount
標頭控制項專案的數目。 必須是非負數。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息 HDM_GETORDERARRAY 的行為,如 Windows SDK 中所述。 它提供以支援標頭專案排序。

範例

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

取得目前標頭控制項溢位按鈕的周框。

BOOL GetOverflowRect(LPRECT lpRect) const;

參數

lpRect
[out] 接收周框資訊的 RECT 結構的指標。

傳回值

如果此函式成功,則為 TRUE;否則為 FALSE。

備註

如果標頭控制項包含的專案數超過可以同時顯示的專案,控制項可以顯示捲動至不可見專案的溢位按鈕。 標頭控制項必須具有HDS_OVERFLOW和HDF_SPLITBUTTON樣式,才能顯示溢位按鈕。 周框會括住溢位按鈕,而且只有在顯示溢位按鈕時才存在。 如需詳細資訊,請參閱 標頭控制項樣式

這個方法會 傳送 windows SDK 中所述的 HDM_GETOVERFLOWRECT訊息。

範例

第一個程式碼範例會定義 用來存取目前標頭控制項的 變數 m_headerCtrl 。 下一個範例中會使用此變數。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

下一個程式碼範例示範 GetOverflowRect 方法。 在程式碼的先前區段中,我們建立了具有五個數據行的標頭控制項。 不過,您可以拖曳資料行分隔符號,讓資料行看不到。 如果看不到某些資料行,標頭控制項會繪製溢位按鈕。 下列程式碼範例會在溢位按鈕的位置周圍繪製 3D 矩形。

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

判斷哪個標頭專案,如果有的話,位於指定的點。

int HitTest(LPHDHITTESTINFO* phdhti);

參數

phdhti
[in, out] HDHITTESTINFO 結構的指標,指定要測試的點並接收測試結果。

傳回值

標頭專案之以零起始的索引,如果有的話,位於指定的位置;否則為 -1。

備註

這個方法會 傳送 windows SDK 中所述的 HDM_HITTEST訊息。

範例

第一個程式碼範例會定義 用來存取目前標頭控制項的 變數 m_headerCtrl 。 下一個範例中會使用此變數。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

下一個程式碼範例示範 HitTest 方法。 在此程式碼範例的上一節中,我們建立了具有五個數據行的標頭控制項。 不過,您可以拖曳資料行分隔符號,讓資料行看不到。 如果資料行是可見的,則本範例會報告資料行的索引,如果資料行不可見則為 -1。

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

將新專案插入指定索引處的標頭控制項中。

int InsertItem(
    int nPos,
    HDITEM* phdi);

參數

nPos
要插入之項目之以零起始的索引。 如果值為零,則會在標頭控制項的開頭插入專案。 如果值大於最大值,則會在標頭控制項的結尾插入專案。

phdi
HDITEM 結構的指標,其中包含要插入之專案的相關資訊。

傳回值

如果成功,則為新專案的索引;否則 - 1。

範例

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

擷取指定矩形內標頭控制項的大小和位置。

BOOL Layout(HDLAYOUT* pHeaderLayout);

參數

pHeaderLayout
HDLAYOUT 結構的指標,其中包含用來設定標頭控制項大小和位置的資訊。

傳回值

如果成功則為非零;否則為 0。

備註

此函式用來判斷要佔用指定矩形之新標頭控制項的適當維度。

範例

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

根據專案在標頭控制項中的順序擷取專案的索引值。

int OrderToIndex(int nOrder) const;

參數

nOrder
專案出現在標頭控制項中,從左至右的以零起始的順序。

傳回值

專案的索引,根據其在標頭控制項中的順序。 索引會從左至右計算,從 0 開始。

備註

此成員函式會實作 Win32 宏 HDM_ORDERTOINDEX 的行為,如 Windows SDK 中所述。 它提供以支援標頭專案排序。

CHeaderCtrl::SetBitmapMargin

設定標頭控制項中點陣圖邊界的寬度。

int SetBitmapMargin(int nWidth);

參數

nWidth
以圖元為單位指定之邊界的寬度,該邊界會圍繞現有標頭控制項內的點陣圖。

傳回值

點陣圖邊界的寬度,以圖元為單位。

備註

此成員函式會實作 Win32 訊息 HDM_SETBITMAPMARGIN 的行為,如 Windows SDK 中所述。

範例

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

設定變更在篩選屬性和張貼 HDN_FILTERCHANGE 通知的時間之間的逾時間隔。

int SetFilterChangeTimeout(DWORD dwTimeOut);

參數

dwTimeOut
逾時值,以毫秒為單位。

傳回值

正在修改之篩選控制項的索引。

備註

此成員函式會實作 Win32 訊息 HDM_SETFILTERCHANGETIMEOUT 的行為,如 Windows SDK 中所述。

範例

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

將焦點設定為目前標頭控制項中的指定標題專案。

BOOL SetFocusedItem(int iItem);

參數

iItem
[in]標頭專案的以零起始的索引。

傳回值

如果此方法成功,則為 TRUE;否則為 FALSE。

備註

這個方法會傳送 windows SDK 中所述的 HDM_SETFOCUSEDITEM訊息。

範例

第一個程式碼範例會定義 用來存取目前標頭控制項的 變數 m_headerCtrl 。 下一個範例中會使用此變數。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

下一個程式碼範例示範 SetFocusedItemGetFocusedItem 方法。 在程式碼的先前區段中,我們建立了具有五個數據行的標頭控制項。 不過,您可以拖曳資料行分隔符號,讓資料行看不到。 下列範例會設定最後一個資料行標頭做為焦點專案。

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

變更標頭專案之間的分隔符號,以指出標題專案的手動拖放。

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

參數

pt
指標的位置。 標頭控制項會根據指標的位置醒目提示適當的分隔線。

nIndex
醒目提示分隔符號的索引。

傳回值

醒目提示分隔符號的索引。

備註

此成員函式會實作 Win32 訊息 HDM_SETHOTDIVIDER 的行為,如 Windows SDK 中所述。 它提供以支援標題專案拖放。

範例

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

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl::SetImageList

將影像清單指派給標頭控制項。

CImageList* SetImageList(CImageList* pImageList);

參數

pImageList
物件的指標 CImageList ,其中包含要指派給標頭控制項的影像清單。

傳回值

先前指派給標頭控制項之 CImageList 物件的指標。

備註

此成員函式會實作 Win32 訊息 HDM_SETIMAGELIST 的行為,如 Windows SDK 中所述。 傳 CImageList 回指標點所在的物件是暫存物件,並在下一個閒置時間處理中刪除。

範例

請參閱 CHeaderCtrl::GetImageList 範例。

CHeaderCtrl::SetItem

設定標頭控制項中指定專案的屬性。

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

參數

nPos
要操作之專案之以零起始的索引。

pHeaderItem
包含新專案相關資訊的 HDITEM 結構的指標。

傳回值

如果成功則為非零;否則為 0。

範例

請參閱 CHeaderCtrl::GetItem 範例。

CHeaderCtrl::SetOrderArray

設定標頭控制項中專案的由左至右順序。

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

參數

iCount
標頭控制項專案的數目。

piArray
緩衝區位址的指標,接收標頭控制項中專案的索引值,依它們從左至右出現的順序。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 宏 HDM_SETORDERARRAY 的行為,如 Windows SDK 中所述。 它提供以支援標頭專案排序。

範例

請參閱 CHeaderCtrl::GetOrderArray 的 範例

另請參閱

CWnd 類別
階層架構圖表
CTabCtrl 類別
CListCtrl 類別
CImageList 類別