WM_CTLCOLOREDIT

인수

wParam : 에디트 컨트롤의 DC핸들. 이 DC에 전경색과 배경색 등을 설정한다.

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

설명

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

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

읽기 전용이나 사용 금지된 에디트 컨트롤은 이 메시지 대신 WM_CTLCOLORSTATIC 메시지가 전달된다. 리치 에디트 컨트롤에 대해서는 이 메시지가 보내지지 않으므로 EM_SETBKCOLOR 메시지로 배경 색상을 바꾼다. 이 메시지를 사용하면 에디트 컨트롤의 폰트를 변경할 수도 있으나 폰트 변경은 통상 WM_SETFONT 메시지를 사용하는 것이 좋다.

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

리턴

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

예제

예제 1

다음 예제는 에디트의 배경 색상을 검정색으로 바꾸고 글자의 전경색은 노란색으로 출력한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HBRUSH hBrush;
	static HWND hEdit;
	TCHAR Mes[]="에디트 컨트롤의 색상을 변경합니다";

	switch(iMessage) {
	case WM_CREATE:
		hEdit=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | 
			WS_BORDER | ES_MULTILINE,
			10,50,400,200,hWnd,(HMENU)0,g_hInst,NULL);
		hBrush=CreateSolidBrush(RGB(0,0,0));
		return 0;
	case WM_CTLCOLOREDIT:
		if ((HWND)lParam==hEdit) {
			SetTextColor((HDC)wParam,RGB(255,255,0));
			SetBkColor((HDC)wParam,RGB(0,0,0));
			return (LRESULT)hBrush;
		}
		break;
	case WM_SETFOCUS:
		SetFocus(hEdit);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		DeleteObject(hBrush);
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

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

플랫폼

95이상

참조

 


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