WM_CTLCOLORLISTBOX

인수

wParam : 리스트 박스의 DC핸들. 이 DC에 전경색과 배경색 등을 설정한다.

lParam : 리스트 박스의 핸들. 한 윈도우에 여러 개의 리스트 박스가 있을 경우 이 핸들값으로 원하는 리스트 박스만 색상을 변경할 수 있다.

설명

시스템이 리스트 박스 컨트롤을 그리기 전에 이 메시지를 보내 배경색상과 전경색 배경색 등을 질문한다. DefWindowProc은 시스템에 정의된 컨트롤 색상을 리턴하도록 되어 있으므로 이 메시지를 처리하지 않으면 디폴트 색상으로 리스트 박스가 그려지며 리스트 박스의 항목은 디폴트 전경색과 배경색으로 그려진다. 부모 윈도우가 이 메시지를 직접 처리하면 wParam으로 전달되는 DC에 전경색과 배경색을 설정할 수 있으며 배경 브러시 핸들을 리턴함으로써 리스트 박스의 배경 색상을 변경할 수 있다.

배경 브러시를 변경하고자 할 경우 WM_CREATE 등의 메시지에서 미리 브러시를 만들어 놓고 이 메시지에서 브러시 핸들을 리턴해 주면 된다. 시스템은 이 메시지에서 리턴한 브러시 핸들로 리스트 박스 컨트롤의 배경을 채색한다. 이 브러시는 시스템이 자동으로 파괴해 주지 않으므로 더 이상 필요가 없어졌을 때(WM_DESTROY) 부모 윈도우가 직접 파괴해 주어야 한다.

이 메시지는 같은 스레드 내에서만 보내진다.

리턴

이 메시지를 처리했으면 배경 브러시의 핸들을 리턴해 준다. 브러시 핸들값은 LRESULT로 캐스팅된 후 리턴되어야 한다. 부모 윈도우가 대화상자라면 BOOL형으로 캐스팅해야 한다.

예제

예제 1

다음 예제는 초록색 배경에 빨간색 전경색으로 리스트 박스를 그린다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	int i;
	static HBRUSH hBrush;
	static HWND hList;
	char Items[][15]={"홍명보","최진철","박지성","히딩크","이운재"};

	switch(iMessage) {
	case WM_CREATE:
		hList=CreateWindow("listbox",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
		LBS_NOTIFY,10,10,150,200,hWnd,(HMENU)0,g_hInst,NULL);
		for (i=0;i<5;i++)
			SendMessage(hList,LB_ADDSTRING,0,(LPARAM)Items[i]);
		hBrush=CreateSolidBrush(RGB(0,255,0));
		return 0;
	case WM_CTLCOLORLISTBOX:
		if ((HWND)lParam==hList) {
			SetTextColor((HDC)wParam,RGB(255,0,0));
			SetBkColor((HDC)wParam,RGB(0,255,0));
			return (LRESULT)hBrush;
		}
		break;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		DeleteObject(hBrush);
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

WM_CREATE에서 검정색의 브러시를 미리 만들어 두었으며 WM_CTLCOLORLISTBOX에서 이 브러시의 핸들을 리턴해 주었다. 한 윈도우에 리스트 박스가 여러 개 있을 경우 lParam으로 전달된 핸들값을 비교하여 원하는 컨트롤에 대해서만 색상을 변경할 수도 있으며 각 리스트 박스별로 다른 색상을 줄 수도 있다. 이 메시지의 wParam으로 DC 핸들이 전달되므로 DC의 전경색, 배경색, 배경 모드, 정렬 상태 등을 변경할 수도 있다. 브러시는 WM_DESTROY에서 반드시 파괴해 주어야 한다.

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr