Класс 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".
Иерархия наследования
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 , описывающую элемент, который нужно нарисовать.
Замечания
Элемент itemAction
DRAWITEMSTRUCT
структуры определяет действие рисования, которое необходимо выполнить.
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член, чтобы реализовать рисование для объекта 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
Столбец для редактирования.
bDiscardChanges
Значение, указывающее, как обрабатывать изменения редактирования пользователя, если пользователь находится в процессе редактирования фильтра при отправке сообщения 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_GETBITMAPMARGIN, как описано в пакете 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_SPLITBUTTON. Дополнительные сведения см. в 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_SPLITBUTTON для отображения кнопки переполнения. Ограничивающий прямоугольник заключает кнопку переполнения и существует только при отображении кнопки переполнения. Дополнительные сведения см. в разделе "Стили элементов управления заголовками".
Этот метод отправляет сообщение 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_SETBITMAPMARGIN, как описано в пакете 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