WM_ERASEBKGND

인수

wParam : 배경 채색에 사용될 DC의 핸들

lParam : 사용되지 않음

설명

윈도우 크기 변경되었거나, 다른 윈도우에 가려진 부분이 드러났다거나 할 때 배경을 지우기 위해 이 메시지가 보내진다. WM_PAINT에서 작업 영역에 출력을 하기 전에 먼저 전에 그려져 있던 내용을 지워야 한다. 이 메시지를 처리하지 않을 경우 DefWindowProc은 윈도우 클래스에 정의된 배경 브러시로 작업 영역을 지운다. 그래서 별도의 처리를 하지 않더라도 윈도우를 새로 그릴 때는 항상 배경 브러시로 작업 영역을 지운 후 WM_PAINT에서 출력을 내보내게 된다.

만약 윈도우 클래스의 배경 브러시가 NULL이면 DefWindowProc은 아무것도 하지 않으며 따라서 배경은 지워지지 않는다. 이 경우 응용 프로그램이 직접 이 메시지를 처리하여 배경을 지워 주어야 한다. 별도의 브러시를 만들어 배경을 지울 수도 있고 비트맵이나 작도 함수로 커스텀 배경을 만들 수도 있다.

리턴

배경을 지웠으면 TRUE(0이 아닌 값)를 리턴하며 지우지 못했으면 0을 리턴한다. 배경을 지운 후 TRUE를 리턴하면 시스템은 더 이상 배경을 지울 필요가 없다는 표시를 하게 되며 이 표시는 WM_PAINT로 전달되는 PAINTSTRUCT 구조체의 fErase 멤버로 나타나게 된다.

예제

예제 1

다음 예제는 윈도우 클래스의 배경 브러시를 NULL로 지정해 놓고 WM_ERASEBKGND에서 직접 배경을 지운다.

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
	  ,LPSTR lpszCmdParam,int nCmdShow)
{
	WndClass.hbrBackground=NULL;
	....
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT crt;
	HBRUSH Brush;
	TCHAR Mes[]="배경 색상이 좀 이상하지요?";

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_ERASEBKGND:
		hdc=(HDC)wParam;
		Brush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,255));
		GetClientRect(hWnd,&crt);
		FillRect(hdc,&crt,Brush);
		DeleteObject(Brush);
		return TRUE;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

해치 브러시를 만든 후 이 브러시로 작업 영역을 가득 채웠다. 같은 방법으로 비트맵을 배경으로 사용할 수도 있다.

플랫폼

95이상

참조

 


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