헤더 컨트롤을 만드는 방법
이 항목에서는 헤더 컨트롤을 만들고 부모 창의 클라이언트 영역 내에 배치하는 방법을 보여 줍니다. CreateWindowEx 함수를 사용하고 WC_HEADER 창 클래스와 적절한 헤더 컨트롤 스타일을 지정하여 헤더 컨트롤을 만들 수 있습니다. 이 창 클래스는 공용 컨트롤 DLL이 로드될 때 등록됩니다. DLL이 로드되었는지 확인하려면 InitCommonControlsEx 함수를 사용합니다.
알아야 하는 작업
기술
필수 구성 요소
- C/C++
- Windows 사용자 인터페이스 프로그래밍
지침
다음 C++ 코드 예제에서는 먼저 InitCommonControlsEx 함수를 호출하여 공통 컨트롤 DLL을 로드합니다. 그런 다음 CreateWindowEx 함수를 호출하여 헤더 컨트롤을 만듭니다. 컨트롤은 처음에 숨겨져 있습니다. HDM_LAYOUT 메시지는 부모 창 내에서 컨트롤의 크기와 위치를 계산하는 데 사용됩니다. 그런 다음 컨트롤의 위치가 변경되고 표시됩니다.
// DoCreateHeader - creates a header control that is positioned along
// the top of the parent window's client area.
// Returns the handle to the header control.
// hwndParent - handle to the parent window.
//
// Global variable
// g_hinst - handle to the application instance
extern HINSTANCE g_hinst;
//
// child-window identifier
int ID_HEADER;
//
HWND DoCreateHeader(HWND hwndParent)
{
HWND hwndHeader;
RECT rcParent;
HDLAYOUT hdl;
WINDOWPOS wp;
// Ensure that the common control DLL is loaded, and then create
// the header control.
INITCOMMONCONTROLSEX icex; //declare an INITCOMMONCONTROLSEX Structure
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_LISTVIEW_CLASSES; //set dwICC member to ICC_LISTVIEW_CLASSES
// this loads list-view and header control classes.
InitCommonControlsEx(&icex);
if ((hwndHeader = CreateWindowEx(0, WC_HEADER, (LPCTSTR) NULL,
WS_CHILD | WS_BORDER | HDS_BUTTONS | HDS_HORZ,
0, 0, 0, 0, hwndParent, (HMENU) ID_HEADER, g_hinst,
(LPVOID) NULL)) == NULL)
return (HWND) NULL;
// Retrieve the bounding rectangle of the parent window's
// client area, and then request size and position values
// from the header control.
GetClientRect(hwndParent, &rcParent);
hdl.prc = &rcParent;
hdl.pwpos = ℘
if (!SendMessage(hwndHeader, HDM_LAYOUT, 0, (LPARAM) &hdl))
return (HWND) NULL;
// Set the size, position, and visibility of the header control.
SetWindowPos(hwndHeader, wp.hwndInsertAfter, wp.x, wp.y,
wp.cx, wp.cy, wp.flags | SWP_SHOWWINDOW);
return hwndHeader;
}
관련 항목