次の方法で共有


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の使用方法の詳細については、「Controlsおよび 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。

解説

このメソッドは、Windows SDK で説明されているように、-1 の列値を持つ Win32 メッセージ HDM_CLEARFILTER の動作を実装します。

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

ヘッダー コントロールのフィルターをクリアします。

BOOL ClearFilter(int nColumn);

パラメーター

nColumn
クリアするフィルターを示す列の値。

戻り値

このメソッドが成功した場合は TRUE。それ以外の場合は FALSE。

解説

このメソッドは、Windows SDK で説明されているように、Win32 メッセージ HDM_CLEARFILTERの動作を実装します。

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

ヘッダー コントロールを作成し、 CHeaderCtrl オブジェクトにアタッチします。

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

パラメーター

dwStyle
ヘッダー コントロールのスタイルを指定します。 ヘッダー コントロール スタイルの説明については、Windows SDK の「 ヘッダー コントロール スタイル 」を参照してください。

rect
ヘッダー コントロールのサイズと位置を指定します。 CRect オブジェクトまたは RECT 構造体のいずれかを指定できます。

pParentWnd
ヘッダー コントロールの親ウィンドウ (通常は CDialog) を指定します。 NULL は指定できません。

nID
ヘッダー コントロールの ID を指定します。

戻り値

初期化が成功した場合は 0 以外。それ以外の場合は 0。

解説

CHeaderCtrl オブジェクトは、2 つの手順で作成します。 まず、コンストラクターを呼び出してから Createを呼び出します。これにより、ヘッダー コントロールが作成され、 CHeaderCtrl オブジェクトにアタッチされます。

ヘッダー コントロール スタイルに加えて、次の一般的なコントロール スタイルを使用して、ヘッダー コントロール自体の位置とサイズの変更方法を決定できます (詳細については、「 Common コントロール スタイル を参照してください)。

  • CCS_BOTTOM コントロールが親ウィンドウのクライアント領域の下部に配置され、幅が親ウィンドウの幅と同じに設定されます。

  • CCS_NODIVIDER 2 ピクセルの強調表示がコントロールの上部に描画されないようにします。

  • CCS_NOMOVEY WM_SIZE メッセージに応答して、コントロールのサイズが変更され、垂直方向ではなく水平方向に移動されます。 CCS_NORESIZE スタイルを使用する場合、このスタイルは適用されません。 ヘッダー コントロールには、既定でこのスタイルがあります。

  • CCS_NOPARENTALIGN コントロールが親ウィンドウの上部または下部に自動的に移動しないようにします。 代わりに、親ウィンドウのサイズが変更された場合でも、コントロールの位置は親ウィンドウ内に保持されます。 CCS_TOPまたはCCS_BOTTOM スタイルも使用する場合、高さは既定に調整されますが、位置と幅は変更されません。

  • CCS_NORESIZE コントロールの初期サイズまたは新しいサイズを設定するときに、コントロールが既定の幅と高さを使用できないようにします。 代わりに、コントロールは、作成またはサイズ変更の要求で指定された幅と高さを使用します。

  • CCS_TOP コントロールが親ウィンドウのクライアント領域の上部に配置され、幅が親ウィンドウの幅と同じに設定されます。

ヘッダー コントロールに次のウィンドウ スタイルを適用することもできます (詳細については、「 Window スタイル を参照してください)。

  • WS_CHILD 子ウィンドウを作成します。 WS_POPUP スタイルでは使用できません。

  • WS_VISIBLE 最初に表示されるウィンドウを作成します。

  • WS_DISABLED 最初に無効になっているウィンドウを作成します。

  • WS_GROUP 方向キーを使用してユーザーが 1 つのコントロールから次のコントロールに移動できるコントロールのグループの最初のコントロールを指定します。 最初のコントロールの後にWS_GROUP スタイルで定義されたすべてのコントロールは、同じグループに属します。 WS_GROUP スタイルを持つ次のコントロールは、スタイル グループを終了し、次のグループを開始します (つまり、1 つのグループは次のグループの開始位置で終了します)。

  • WS_TABSTOP Tab キーを使用してユーザーが移動できる任意の数のコントロールのいずれかを指定します。 Tab キーを押すと、ユーザーは WS_TABSTOP スタイルで指定された次のコントロールに移動します。

コントロールで拡張ウィンドウ スタイルを使用する場合は、Createの代わりに CreateEx を呼び出します。

// 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 の CreateWindowExdwExStyle パラメーターを参照してください。

dwStyle
ヘッダー コントロールのスタイル。 ヘッダー コントロール スタイルの説明については、Windows SDK の「 ヘッダー コントロール スタイル 」を参照してください。 その他のスタイルの一覧については、「 Create を参照してください。

rect
作成するウィンドウのサイズと位置を記述する RECT 構造体への参照 ( pParentWnd のクライアント座標)。

pParentWnd
コントロールの親であるウィンドウへのポインター。

nID
コントロールの子ウィンドウ ID。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

Createの代わりにCreateExを使用して、Windows 拡張スタイルの前書きWS_EX_で指定された拡張 Windows スタイルを適用します。

CHeaderCtrl::CreateDragImage

ヘッダー コントロール内にアイテムのイメージの透過的なバージョンを作成します。

CImageList* CreateDragImage(int nIndex);

パラメーター

nIndex
ヘッダー コントロール内の項目の 0 から始まるインデックス。 この項目に割り当てられたイメージは、透明なイメージの基礎となります。

戻り値

成功した場合は CImageList オブジェクトへのポインター。それ以外の場合は NULL。 返されるリストに含まれる画像は 1 つだけです。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_CREATEDRAGIMAGEの動作を実装します。 ヘッダー項目のドラッグ アンド ドロップをサポートするために用意されています。

返されたポインターが指す CImageList オブジェクトは一時的なオブジェクトであり、次のアイドル時間処理で削除されます。

CHeaderCtrl::D eleteItem

ヘッダー コントロールから項目を削除します。

BOOL DeleteItem(int nPos);

パラメーター

nPos
削除する項目の 0 から始まるインデックスを指定します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 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 構造体へのポインター。

解説

DRAWITEMSTRUCT構造体のitemAction メンバーは、実行する描画アクションを定義します。

既定では、このメンバー関数は何も行いません。 このメンバー関数をオーバーライドして、所有者描画 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。

解説

このメソッドは、Windows SDK で説明されているように、Win32 メッセージ HDM_EDITFILTERの動作を実装します。

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

CHeaderCtrl::GetBitmapMargin

ヘッダー コントロール内のビットマップの余白の幅を取得します。

int GetBitmapMargin() const;

戻り値

ビットマップ余白の幅 (ピクセル単位)。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_GETBITMAPMARGINの動作を実装します。

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

現在のヘッダー コントロールにフォーカスがある項目のインデックスを取得します。

int GetFocusedItem() const;

戻り値

フォーカスがあるヘッダー項目の 0 から始まるインデックス。

解説

このメソッドは、Windows SDK で説明されている HDM_GETFOCUSEDITEM メッセージを送信します。

最初のコード例では、現在のヘッダー コントロールへのアクセスに使用される変数 ( m_headerCtrl) を定義します。 この変数は次の例で使用されています。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

次のコード例では、 SetFocusedItem メソッドと GetFocusedItem メソッドを示します。 コードの前のセクションでは、5 つの列を含むヘッダー コントロールを作成しました。 ただし、列の区切り記号をドラッグして、列が表示されないようにすることができます。 次の使用例は、最後の列ヘッダーをフォーカス項目として設定し、確認します。

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 オブジェクトへのポインター。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_GETIMAGELISTの動作を実装します。 返されたポインターが指す 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
取得する項目の 0 から始まるインデックスを指定します。

pHeaderItem
新しい項目を受け取る HDITEM 構造体へのポインター。 この構造体は、 InsertItem および SetItem メンバー関数と共に使用されます。 mask要素に設定されたフラグを使用すると、対応する要素の値が戻り時に適切に入力されます。 mask要素が 0 に設定されている場合、他の構造体要素の値は意味がありません。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 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ヘッダー項目の 0 から始まるインデックス。 詳細については、HDITEM 構造体のfmt メンバーを参照してください。

lpRect
[out]外接する四角形の情報を受け取る RECT 構造体へのポインター。

戻り値

この関数が成功した場合は TRUE。それ以外の場合は FALSE。

解説

このメソッドは、Windows SDK で説明されている HDM_GETITEMDROPDOWNRECT メッセージを送信します。

最初のコード例では、現在のヘッダー コントロールへのアクセスに使用される変数 ( m_headerCtrl) を定義します。 この変数は次の例で使用されています。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

次のコード例では、 GetItemDropDownRect メソッドを示します。 コードの前のセクションでは、5 つの列を含むヘッダー コントロールを作成しました。 次のコード例では、ヘッダー ドロップダウン ボタン用に予約されている最初の列の位置の周囲に 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
ヘッダー コントロール項目の 0 から始まるインデックス。

lpRect
外接する四角形の情報を受け取る RECT 構造体のアドレスへのポインター。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

このメソッドは、Windows SDK で説明されているように、Win32 メッセージ HDM_GETITEMRECTの動作を実装します。

CHeaderCtrl::GetOrderArray

ヘッダー コントロール内の項目の左から右の順序を取得します。

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

パラメーター

piArray
ヘッダー コントロール内の項目のインデックス値を左から右に表示する順序で受け取るバッファーのアドレスへのポインター。

iCount
ヘッダー コントロール項目の数。 負以外にする必要があります。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_GETORDERARRAYの動作を実装します。 ヘッダー項目の順序付けをサポートするために用意されています。

// 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 メソッドを示します。 コードの前のセクションでは、5 つの列を含むヘッダー コントロールを作成しました。 ただし、列の区切り記号をドラッグして、列が表示されないようにすることができます。 一部の列が表示されない場合、ヘッダー コントロールはオーバーフロー ボタンを描画します。 次のコード例では、オーバーフロー ボタンの位置の周囲に 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
[入力、出力]テストするポイントを指定し、テストの結果を受け取る HDHITTESTINFO 構造体へのポインター。

戻り値

指定した位置にあるヘッダー項目 (存在する場合) の 0 から始まるインデックス。それ以外の場合は -1。

解説

このメソッドは、Windows SDK で説明されている HDM_HITTEST メッセージを送信します。

最初のコード例では、現在のヘッダー コントロールへのアクセスに使用される変数 ( m_headerCtrl) を定義します。 この変数は次の例で使用されています。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

次のコード例では、 HitTest メソッドを示します。 このコード例の前のセクションでは、5 つの列を含むヘッダー コントロールを作成しました。 ただし、列の区切り記号をドラッグして、列が表示されないようにすることができます。 次の使用例は、列が表示されている場合はインデックスをレポートし、列が表示されない場合は -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
挿入する項目の 0 から始まるインデックス。 値が 0 の場合、項目はヘッダー コントロールの先頭に挿入されます。 値が最大値より大きい場合、項目はヘッダー コントロールの末尾に挿入されます。

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 以外を返します。それ以外の場合は 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 から始まる順序。

戻り値

ヘッダー コントロール内の順序に基づく項目のインデックス。 インデックスは、0 から始まる左から右にカウントされます。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 マクロ HDM_ORDERTOINDEXの動作を実装します。 ヘッダー項目の順序付けをサポートするために用意されています。

CHeaderCtrl::SetBitmapMargin

ヘッダー コントロール内のビットマップの余白の幅を設定します。

int SetBitmapMargin(int nWidth);

パラメーター

nWidth
既存のヘッダー コントロール内のビットマップを囲む余白の幅 (ピクセル単位で指定)。

戻り値

ビットマップ余白の幅 (ピクセル単位)。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_SETBITMAPMARGINの動作を実装します。

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

フィルター属性で変更が行われてから HDN_FILTERCHANGE 通知がポストされるまでの、タイムアウト間隔を設定します。

int SetFilterChangeTimeout(DWORD dwTimeOut);

パラメーター

dwTimeOut
タイムアウト値 (ミリ秒単位)。

戻り値

変更するフィルター コントロールのインデックス。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_SETFILTERCHANGETIMEOUTの動作を実装します。

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

現在のヘッダー コントロール内の指定したヘッダー項目にフォーカスを設定します。

BOOL SetFocusedItem(int iItem);

パラメーター

iItem
[in]ヘッダー項目の 0 から始まるインデックス。

戻り値

このメソッドが成功した場合は TRUE。それ以外の場合は FALSE。

解説

このメソッドは、Windows SDK で説明されている HDM_SETFOCUSEDITEM メッセージを送信します。

最初のコード例では、現在のヘッダー コントロールへのアクセスに使用される変数 ( m_headerCtrl) を定義します。 この変数は次の例で使用されています。

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

次のコード例では、 SetFocusedItem メソッドと GetFocusedItem メソッドを示します。 コードの前のセクションでは、5 つの列を含むヘッダー コントロールを作成しました。 ただし、列の区切り記号をドラッグして、列が表示されないようにすることができます。 次の使用例は、最後の列ヘッダーをフォーカス項目として設定し、確認します。

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
強調表示された分割線のインデックス。

戻り値

強調表示された分割線のインデックス。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_SETHOTDIVIDERの動作を実装します。 ヘッダー項目のドラッグ アンド ドロップをサポートするために用意されています。

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

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl::SetImageList

ヘッダー コントロールにイメージ リストを割り当てます。

CImageList* SetImageList(CImageList* pImageList);

パラメーター

pImageList
ヘッダー コントロールに割り当てられるイメージ リストを含む CImageList オブジェクトへのポインター。

戻り値

以前にヘッダー コントロールに割り当てられた CImageList オブジェクトへのポインター。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 メッセージ HDM_SETIMAGELISTの動作を実装します。 返されたポインターが指す CImageList オブジェクトは一時的なオブジェクトであり、次のアイドル時間処理で削除されます。

CHeaderCtrl::GetImageList の例を参照してください。

CHeaderCtrl::SetItem

ヘッダー コントロール内の指定された項目の属性を設定します。

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

パラメーター

nPos
操作する項目の 0 から始まるインデックス。

pHeaderItem
新しい項目に関する情報を含む HDITEM 構造体へのポインター。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

CHeaderCtrl::GetItem の例を参照してください。

CHeaderCtrl::SetOrderArray

ヘッダー コントロール内の項目の左から右の順序を設定します。

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

パラメーター

iCount
ヘッダー コントロール項目の数。

piArray
ヘッダー コントロール内の項目のインデックス値を左から右に表示する順序で受け取るバッファーのアドレスへのポインター。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

このメンバー関数は、Windows SDK で説明されているように、Win32 マクロ HDM_SETORDERARRAYの動作を実装します。 ヘッダー項目の順序付けをサポートするために用意されています。

CHeaderCtrl::GetOrderArray の例を参照してください。

関連項目

CWnd クラス
階層図
CTabCtrl クラス
CListCtrl クラス
CImageList クラス