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();
Return Value
이 메서드가 성공하면 TRUE입니다. 그렇지 않으면 FALSE입니다.
설명
이 메서드는 Windows SDK에 설명된 대로 열 값이 -1인 Win32 메시지 HDM_CLEARFILTER 동작을 구현합니다.
예시
m_myHeaderCtrl.ClearAllFilters();
CHeaderCtrl::ClearFilter
헤더 컨트롤에 대한 필터를 지웁니다.
BOOL ClearFilter(int nColumn);
매개 변수
nColumn
지울 필터를 나타내는 열 값입니다.
Return Value
이 메서드가 성공하면 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를 지정합니다.
Return Value
초기화에 성공하면 0이 아닌 값입니다. 그렇지 않으면 0입니다.
설명
두 단계로 개체를 CHeaderCtrl
생성합니다. 먼저 생성자를 호출한 다음 호출 Create
합니다. 그러면 헤더 컨트롤이 만들어지고 개체에 CHeaderCtrl
연결됩니다.
헤더 컨트롤 스타일 외에도 다음과 같은 공통 컨트롤 스타일을 사용하여 헤더 컨트롤의 위치와 크기 조정 방법을 결정할 수 있습니다(자세한 내용은 공통 컨트롤 스타일 참조).
CCS_BOTTOM 컨트롤이 부모 창의 클라이언트 영역 아래쪽에 위치하도록 하고 너비를 부모 창의 너비와 동일하게 설정합니다.
CCS_NODIVIDER 컨트롤 맨 위에 2픽셀 강조 표시가 그려지지 않도록 합니다.
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 스타일로 지정된 다음 컨트롤로 이동합니다.
컨트롤에 확장 창 스타일을 사용하려면 대신 CreateExCreate
를 호출합니다.
예시
// pParentWnd is a pointer to the parent window.
m_myHeaderCtrl.Create(WS_CHILD | WS_VISIBLE | HDS_HORZ,
CRect(10, 10, 600, 50), pParentWnd, 1);
CHeaderCtrl::CreateEx
컨트롤(자식 창)을 만들어 개체와 CHeaderCtrl
연결합니다.
virtual BOOL CreateEx(
DWORD dwExStyle,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
매개 변수
dwExStyle
만들 컨트롤의 확장 스타일을 지정합니다. 확장된 Windows 스타일 목록은 Windows SDK의 CreateWindowEx에 대한 dwExStyle 매개 변수를 참조하세요.
dwStyle
헤더 컨트롤의 스타일입니다. 헤더 컨트롤 스타일에 대한 설명은 Windows SDK의 헤더 컨트롤 스타일을 참조하세요. 추가 스타일 목록은 만들기를 참조하세요.
rect
pParentWnd의 클라이언트 좌표에서 만들 창의 크기와 위치를 설명하는 RECT 구조체에 대한 참조입니다.
pParentWnd
컨트롤의 부모 창에 대한 포인터입니다.
nID
컨트롤의 자식 창 ID입니다.
Return Value
성공하면 0이 아니고, 그렇지 않으면 0입니다.
설명
Windows 확장 스타일 서문 WS_EX_ 지정된 확장 Windows 스타일을 적용하는 대신 Create
사용합니다CreateEx
.
CHeaderCtrl::CreateDragImage
헤더 컨트롤 내에 항목 이미지의 투명한 버전을 만듭니다.
CImageList* CreateDragImage(int nIndex);
매개 변수
nIndex
헤더 컨트롤 내 항목의 인덱스(0부터 시작)입니다. 이 항목에 할당된 이미지는 투명 이미지의 기본이 됩니다.
Return Value
성공하면 CImageList 개체에 대한 포인터입니다. 그렇지 않으면 NULL입니다. 반환된 목록에는 하나의 이미지만 포함됩니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 메시지 HDM_CREATEDRAGIMAGE 동작을 구현합니다. 헤더 항목 끌어서 놓기를 지원하기 위해 제공됩니다.
CImageList
반환된 포인터가 가리키는 개체는 임시 개체이며 다음 유휴 시간 처리에서 삭제됩니다.
CHeaderCtrl::D eleteItem
헤더 컨트롤에서 항목을 삭제합니다.
BOOL DeleteItem(int nPos);
매개 변수
nPos
삭제할 항목의 인덱스(0부터 시작하는 인덱스)를 지정합니다.
Return Value
성공하면 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를 지정합니다.
Return Value
이 메서드가 성공하면 TRUE입니다. 그렇지 않으면 FALSE입니다.
설명
이 메서드는 Windows SDK에 설명된 대로 Win32 메시지 HDM_EDITFILTER 동작을 구현합니다.
예시
int iFilter = m_myHeaderCtrl.EditFilter(1, TRUE);
CHeaderCtrl::GetBitmapMargin
헤더 컨트롤에서 비트맵 여백의 너비를 검색합니다.
int GetBitmapMargin() const;
Return Value
비트맵 여백의 너비(픽셀)입니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 메시지 HDM_GETBITMAPMARGIN 동작을 구현합니다.
예시
int iMargin = m_myHeaderCtrl.GetBitmapMargin();
CHeaderCtrl::GetFocusedItem
현재 헤더 컨트롤에 포커스가 있는 항목의 인덱스입니다.
int GetFocusedItem() const;
Return Value
포커스가 있는 헤더 항목의 인덱스(0부터 시작하는 인덱스)입니다.
설명
이 메서드는 Windows SDK에 설명된 HDM_GETFOCUSEDITEM 메시지를 보냅니다.
예시
첫 번째 코드 예제에서는 현재 헤더 컨트롤에 액세스하는 데 사용되는 변수 m_headerCtrl
를 정의합니다. 이 변수는 다음 예제에서 사용됩니다.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
다음 코드 예제에서는 및 GetFocusedItem
메서드를 SetFocusedItem
보여 줍니다. 코드의 이전 섹션에서는 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;
Return Value
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 구조체에 대한 포인터입니다. 이 구조체는 멤버 함수와 SetItem
함께 InsertItem
사용됩니다. 요소에 설정된 플래그는 mask
반환 시 해당 요소의 값이 제대로 채워지도록 합니다. mask
요소가 0으로 설정된 경우 다른 구조 요소의 값은 의미가 없습니다.
Return Value
성공하면 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;
Return Value
성공하면 헤더 컨트롤 항목의 수입니다. 그렇지 않으면 - 1.
예시
CHeaderCtrl::D eleteItem에 대한 예제를 참조하세요.
CHeaderCtrl::GetItemDropDownRect
현재 헤더 컨트롤의 헤더 항목에 대한 드롭다운 단추의 경계 사각형을 가져옵니다.
BOOL GetItemDropDownRect(
int iItem,
LPRECT lpRect) const;
매개 변수
iItem
[in] 스타일이 HDF_SPLITBUTTON 헤더 항목의 인덱스(0부터 시작하는 인덱스)입니다. 자세한 내용은 HDITEM 구조체의 멤버를 참조 fmt
하세요.
lpRect
[out] 경계 사각형 정보를 수신하는 RECT 구조체에 대한 포인터입니다.
Return Value
이 함수가 성공하면 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 구조체의 주소에 대한 포인터입니다.
Return Value
성공하면 0이 아니고, 그렇지 않으면 0입니다.
설명
이 메서드는 Windows SDK에 설명된 대로 Win32 메시지 HDM_GETITEMRECT 동작을 구현합니다.
CHeaderCtrl::GetOrderArray
헤더 컨트롤에서 항목의 왼쪽에서 오른쪽 순서를 검색합니다.
BOOL GetOrderArray(
LPINT piArray,
int iCount);
매개 변수
piArray
헤더 컨트롤에 있는 항목의 인덱스 값을 왼쪽에서 오른쪽으로 나타나는 순서대로 받는 버퍼의 주소에 대한 포인터입니다.
iCount
헤더 컨트롤 항목의 수입니다. 음수가 아니어야 합니다.
Return Value
성공하면 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 구조체에 대한 포인터입니다.
Return Value
이 함수가 성공하면 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
[in, out] 테스트할 지점을 지정하고 테스트 결과를 수신하는 HDHITTESTINFO 구조체에 대한 포인터입니다.
Return Value
지정된 위치에 있는 헤더 항목(있는 경우)의 인덱스(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 구조체에 대한 포인터입니다.
Return Value
성공하면 새 항목의 인덱스입니다. 그렇지 않으면 - 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 구조체에 대한 포인터입니다.
Return Value
성공하면 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부터 시작하는 순서)입니다.
Return Value
헤더 컨트롤의 순서에 따라 항목의 인덱스입니다. 인덱스는 0부터 시작하여 왼쪽에서 오른쪽으로 계산됩니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 매크로 HDM_ORDERTOINDEX 동작을 구현합니다. 헤더 항목 순서 지정을 지원하기 위해 제공됩니다.
CHeaderCtrl::SetBitmapMargin
헤더 컨트롤에서 비트맵 여백의 너비를 설정합니다.
int SetBitmapMargin(int nWidth);
매개 변수
nWidth
기존 헤더 컨트롤 내의 비트맵을 둘러싸는 여백의 너비(픽셀 단위)입니다.
Return Value
비트맵 여백의 너비(픽셀)입니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 메시지 HDM_SETBITMAPMARGIN 동작을 구현합니다.
예시
int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);
CHeaderCtrl::SetFilterChangeTimeout
필터 특성에서 변경이 발생하는 시간과 HDN_FILTERCHANGE 알림 게시 사이의 시간 제한 간격을 설정합니다.
int SetFilterChangeTimeout(DWORD dwTimeOut);
매개 변수
dwTimeOut
시간 제한 값(밀리초)입니다.
Return Value
수정할 필터 컨트롤의 인덱스입니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 메시지 HDM_SETFILTERCHANGETIMEOUT 동작을 구현합니다.
예시
int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);
CHeaderCtrl::SetFocusedItem
포커스를 현재 헤더 컨트롤의 지정된 헤더 항목으로 설정합니다.
BOOL SetFocusedItem(int iItem);
매개 변수
iItem
[in] 헤더 항목의 인덱스(0부터 시작하는 인덱스)입니다.
Return Value
이 메서드가 성공하면 TRUE입니다. 그렇지 않으면 FALSE입니다.
설명
이 메서드는 Windows SDK에 설명된 HDM_SETFOCUSEDITEM 메시지를 보냅니다.
예시
첫 번째 코드 예제에서는 현재 헤더 컨트롤에 액세스하는 데 사용되는 변수 m_headerCtrl
를 정의합니다. 이 변수는 다음 예제에서 사용됩니다.
CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;
다음 코드 예제에서는 및 GetFocusedItem
메서드를 SetFocusedItem
보여 줍니다. 코드의 이전 섹션에서는 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
강조 표시된 구분선의 인덱스입니다.
Return Value
강조 표시된 구분선의 인덱스입니다.
설명
이 멤버 함수는 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
할당할 이미지 목록을 포함하는 개체에 대한 포인터입니다.
Return Value
이전에 헤더 컨트롤에 할당된 CImageList 개체에 대한 포인터입니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 메시지 HDM_SETIMAGELIST 동작을 구현합니다. CImageList
반환된 포인터가 가리키는 개체는 임시 개체이며 다음 유휴 시간 처리에서 삭제됩니다.
예시
CHeaderCtrl::GetImageList에 대한 예제를 참조하세요.
CHeaderCtrl::SetItem
헤더 컨트롤에서 지정된 항목의 특성을 설정합니다.
BOOL SetItem(
int nPos,
HDITEM* pHeaderItem);
매개 변수
nPos
조작할 항목의 인덱스(0부터 시작)입니다.
pHeaderItem
새 항목에 대한 정보를 포함하는 HDITEM 구조체에 대한 포인터입니다.
Return Value
성공하면 0이 아니고, 그렇지 않으면 0입니다.
예시
CHeaderCtrl::GetItem에 대한 예제를 참조하세요.
CHeaderCtrl::SetOrderArray
헤더 컨트롤에서 항목의 왼쪽에서 오른쪽 순서를 설정합니다.
BOOL SetOrderArray(
int iCount,
LPINT piArray);
매개 변수
iCount
헤더 컨트롤 항목의 수입니다.
piArray
헤더 컨트롤에 있는 항목의 인덱스 값을 왼쪽에서 오른쪽으로 나타나는 순서대로 받는 버퍼의 주소에 대한 포인터입니다.
Return Value
성공하면 0이 아니고, 그렇지 않으면 0입니다.
설명
이 멤버 함수는 Windows SDK에 설명된 대로 Win32 매크로 HDM_SETORDERARRAY 동작을 구현합니다. 헤더 항목 순서 지정을 지원하기 위해 제공됩니다.
예시
CHeaderCtrl::GetOrderArray에 대한 예제를 참조하세요.