Класс 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 Обозреватель 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, как описано в пакете SDK для Windows.

Пример

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

Очищает фильтр для элемента управления заголовком.

BOOL ClearFilter(int nColumn);

Параметры

nColumn
Значение столбца, указывающее, какой фильтр следует очистить.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если этот метод выполнен успешно; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Этот метод реализует поведение сообщения Win32 HDM_CLEARFILTER, как описано в пакете SDK для Windows.

Пример

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

Создает элемент управления заголовком и присоединяет его к объекту CHeaderCtrl .

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

Параметры

dwStyle
Задает стиль элемента управления заголовком. Описание стилей элементов управления заголовками см. в разделе "Стили элементов управления заголовками" в пакете SDK для Windows.

rect
Задает размер и позицию элемента управления заголовком. Это может быть объект 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 см. в параметре dwExStyle для CreateWindowEx в пакете SDK для Windows.

dwStyle
Стиль элемента управления заголовком. Описание стилей элементов управления заголовками см. в разделе "Стили элементов управления заголовками" в пакете SDK для Windows. Дополнительные стили см. в разделе "Создание " для списка дополнительных стилей.

rect
Ссылка на структуру RECT , описывающую размер и положение создаваемого окна в координатах клиента pParentWnd.

pParentWnd
Указатель на окно, которое является родительским элементом элемента управления.

Nid
Идентификатор дочернего окна элемента управления.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Используйте CreateEx вместо Create применения расширенных стилей Windows, указанных предисловием расширенного стиля Windows WS_EX_.

CHeaderCtrl::CreateDragImage

Создает прозрачную версию изображения элемента в элементе управления заголовком.

CImageList* CreateDragImage(int nIndex);

Параметры

Nindex
Отсчитываемый от нуля индекс элемента в элементе управления заголовком. Изображение, назначенное этому элементу, является основой прозрачного изображения.

Возвращаемое значение

Указатель на объект CImageList в случае успешного выполнения; в противном случае — ЗНАЧЕНИЕ NULL. Возвращенный список содержит только одно изображение.

Замечания

Эта функция-член реализует поведение сообщения Win32 HDM_CREATEDRAGIMAGE, как описано в пакете SDK для Windows. Она предоставляется для поддержки перетаскивания и перетаскивания элементов заголовка.

Объект 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

Вызывается платформой, когда визуальный аспект элемента управления заголовком owner-draw изменяется.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Параметры

lpDrawItemStruct
Указатель на структуру DRAWITEMSTRUCT , описывающую элемент, который нужно нарисовать.

Замечания

Элемент itemActionDRAWITEMSTRUCT структуры определяет действие рисования, которое необходимо выполнить.

По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член, чтобы реализовать рисование для объекта owner-draw CHeaderCtrl .

Приложение должно восстановить все объекты графического интерфейса устройства (GDI), выбранные для контекста отображения, предоставленного в lpDrawItemStruct , прежде чем эта функция-член завершится.

Пример

// 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
Столбец для редактирования.

bDis карта Changes
Значение, указывающее, как обрабатывать изменения редактирования пользователя, если пользователь находится в процессе редактирования фильтра при отправке сообщения HDM_EDITFILTER .

Укажите ЗНАЧЕНИЕ TRUE, чтобы вывести карта изменения, внесенные пользователем, или FALSE, чтобы принять изменения, внесенные пользователем.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если этот метод выполнен успешно; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Этот метод реализует поведение HDM_EDITFILTER сообщения Win32, как описано в пакете SDK для Windows.

Пример

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

CHeaderCtrl::GetBitmapMargin

Извлекает ширину поля растрового изображения в элементе управления заголовком.

int GetBitmapMargin() const;

Возвращаемое значение

Ширина поля растрового изображения в пикселях.

Замечания

Эта функция-член реализует поведение сообщения Win32 HDM_GEТБ ITMAPMARGIN, как описано в пакете SDK для Windows.

Пример

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

Получает индекс элемента с фокусом в текущем элементе управления заголовком.

int GetFocusedItem() const;

Возвращаемое значение

Отсчитываемый от нуля индекс элемента заголовка с фокусом.

Замечания

Этот метод отправляет сообщение HDM_GETFOCUSEDITEM , описанное в пакете SDK для Windows.

Пример

Первый пример кода определяет переменную, m_headerCtrlкоторая используется для доступа к текущему элементу управления заголовком. Эта переменная используется в следующем примере.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Следующий пример кода демонстрирует SetFocusedItem методы и GetFocusedItem методы. В предыдущем разделе кода мы создали элемент управления заголовком с пятью столбцами. Однако можно перетащить разделитель столбцов, чтобы столбец не был видимым. Следующий пример задает и подтверждает последний заголовок столбца в качестве элемента фокуса.

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, как описано в пакете SDK для Windows. Объект 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_SPLIТБ UTTON. Дополнительные сведения см. в fmt элементе структуры HDITEM .

lpRect
[out] Указатель на структуру RECT для получения ограничивающих прямоугольников.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если эта функция выполнена успешно; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Этот метод отправляет сообщение HDM_GETITEMDROPDOWNRECT , описанное в пакете SDK для Windows.

Пример

Первый пример кода определяет переменную, m_headerCtrlкоторая используется для доступа к текущему элементу управления заголовком. Эта переменная используется в следующем примере.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

В следующем примере кода демонстрируется GetItemDropDownRect метод. В предыдущем разделе кода мы создали элемент управления заголовком с пятью столбцами. Следующий пример кода рисует трехмерный прямоугольник вокруг расположения в первом столбце, зарезервированном для кнопки раскрывающегося списка заголовков.

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, как описано в пакете SDK для Windows.

CHeaderCtrl::GetOrderArray

Извлекает левый направо порядок элементов в элементе управления заголовком.

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

Параметры

PiArray
Указатель на адрес буфера, получающего значения индекса элементов в элементе управления заголовком, в порядке, в котором они отображаются слева направо.

iCount
Количество элементов управления заголовком. Должен быть не отрицательным.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Эта функция-член реализует поведение сообщения Win32 HDM_GETORDERARRAY, как описано в пакете SDK для Windows. Он предоставляется для поддержки упорядочения элементов заголовка.

Пример

// 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_SPLIТБ UTTON, чтобы отобразить кнопку переполнения. Ограничивающий прямоугольник заключает кнопку переполнения и существует только при отображении кнопки переполнения. Дополнительные сведения см. в разделе "Стили элементов управления заголовками".

Этот метод отправляет сообщение HDM_GETOVERFLOWRECT , описанное в пакете SDK для Windows.

Пример

Первый пример кода определяет переменную, m_headerCtrlкоторая используется для доступа к текущему элементу управления заголовком. Эта переменная используется в следующем примере.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

В следующем примере кода демонстрируется GetOverflowRect метод. В предыдущем разделе кода мы создали элемент управления заголовком с пятью столбцами. Однако можно перетащить разделитель столбцов, чтобы столбец не был видимым. Если некоторые столбцы не видны, элемент управления заголовком рисует кнопку переполнения. Следующий пример кода рисует трехмерный прямоугольник вокруг расположения кнопки переполнения.

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.

Замечания

Этот метод отправляет сообщение HDM_HITTEST , описанное в пакете SDK для Windows.

Пример

Первый пример кода определяет переменную, 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, как описано в пакете SDK для Windows. Он предоставляется для поддержки упорядочения элементов заголовка.

CHeaderCtrl::SetBitmapMargin

Задает ширину поля растрового изображения в элементе управления заголовком.

int SetBitmapMargin(int nWidth);

Параметры

nWidth
Ширина, указанная в пикселях поля, окружающего растровое изображение в существующем элементе управления заголовком.

Возвращаемое значение

Ширина поля растрового изображения в пикселях.

Замечания

Эта функция-член реализует поведение сообщения Win32 HDM_SEТБ ITMAPMARGIN, как описано в пакете SDK для Windows.

Пример

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

Задает интервал времени ожидания между временем изменения в атрибутах фильтра и публикацией уведомления HDN_FILTERCHANGE .

int SetFilterChangeTimeout(DWORD dwTimeOut);

Параметры

dwTimeOut
Значение времени ожидания в миллисекундах.

Возвращаемое значение

Индекс измененного элемента управления фильтра.

Замечания

Эта функция-член реализует поведение HDM_SETFILTERCHANGETIMEOUT сообщения Win32, как описано в пакете SDK для Windows.

Пример

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

Задает фокус на указанный элемент заголовка в текущем элементе управления заголовками.

BOOL SetFocusedItem(int iItem);

Параметры

iItem
[in] Отсчитываемый от нуля индекс элемента заголовка.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если этот метод выполнен успешно; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Этот метод отправляет сообщение HDM_SETFOCUSEDITEM , описанное в пакете SDK для Windows.

Пример

Первый пример кода определяет переменную, m_headerCtrlкоторая используется для доступа к текущему элементу управления заголовком. Эта переменная используется в следующем примере.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Следующий пример кода демонстрирует SetFocusedItem методы и GetFocusedItem методы. В предыдущем разделе кода мы создали элемент управления заголовком с пятью столбцами. Однако можно перетащить разделитель столбцов, чтобы столбец не был видимым. Следующий пример задает и подтверждает последний заголовок столбца в качестве элемента фокуса.

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);

Параметры

пт
Позиция указателя. Элемент управления заголовком выделяет соответствующий разделитель на основе положения указателя.

Nindex
Индекс выделенного разделителя.

Возвращаемое значение

Индекс выделенного разделителя.

Замечания

Эта функция-член реализует поведение сообщения Win32 HDM_SETHOTDIVIDER, как описано в пакете SDK для Windows. Она предоставляется для поддержки перетаскивания и перетаскивания элементов заголовка.

Пример

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, как описано в пакете SDK для Windows. Объект 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, как описано в пакете SDK для Windows. Он предоставляется для поддержки упорядочения элементов заголовка.

Пример

См. пример для CHeaderCtrl::GetOrderArray.

См. также

Класс CWnd
Диаграмма иерархии
Класс CTabCtrl
Класс CListCtrl
Класс CImageList