FillRect

원형

int FillRect(HDC hDC, CONST RECT *lprc, HBRUSH hbr);

MFC 원형

void CDC::FillRect( LPCRECT lpRect, CBrush* pBrush );

인수

▶hDC : DC의 핸들

▶lprc : 채울 사각 영역을 지정하는 RECT 구조체의 포인터. 단위는 논리 단위이다.

▶hbr : 사각 영역을 채울 브러시 핸들

리턴

성공하면 0이 아닌 값을 리턴하며 실패할 경우 0을 리턴한다.

설명

lprc 사각 영역을 hbr 브러시로 칠한다. 경계선은 그리지 않으며 내부만 칠하기 때문에 특정 영역을 단색으로 칠할 때 편리하다. 사각 영역의 왼쪽과 위쪽은 채색 영역에 포함되지만 오른쪽과 아래쪽은 맵핑모드에 상관없이 포함되지 않는다. 예를 들어 (10,10)-(100,100) 영역을 칠하면 실제로 칠해지는 영역을 (10,10)-(99,99)까지이다.

브러시는 CreateSolidBrush, CreateHatchBrush 등으로 만든 커스텀 브러시를 쓸 수도 있고 GetStockObject 함수로 구한 스톡 브러시를 쓸 수도 있다. 또는 시스템 색상에 1을 더하여 사용하는 것도 가능하다. 브러시의 핸들을 인수로 전달하며 DC에 먼저 브러시를 선택해 놓을 필요가 없기 때문에 다른 GDI 함수에 비해 필요한 코드가 훨씬 더 짧다는 것이 특징이다. 경계선을 그리지 않으므로 주로 특정 영역을 완전히 채울 때 많이 사용하며 특히 배경색과 동일한 브러시를 사용하면 이미 출력된 내용을 지울 수 있다.

예제 1

다음 예제는 마우스 버튼을 누를 때마다 두 개의 문자열을 번갈아 가며 출력한다. 이전에 출력된 문자열을 삭제하기 위해 윈도우의 배경색으로 FillRect 함수를 호출하였다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	static int i;
	char str[2][20]={"맛동산","브라보콘"};
	RECT rt;

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		hdc=GetDC(hWnd);
		SetRect(&rt,10,10,100,30);
		FillRect(hdc,&rt,(HBRUSH)(COLOR_WINDOW+1));
		TextOut(hdc,10,10,str[i],lstrlen(str[i]));
		i++;
		if (i==2) i=0;
		ReleaseDC(hWnd,hdc);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

실행 결과는 다음과 같다.

만약 이 예제에서 FillRect 호출문을 빼 버리면 이미 출력된 문자열이 삭제되지 않으므로 "맛동산"을 출력할 때는 "맛동산콘"으로 보이게 된다. 먼저 출력된 문자열을 삭제해야 하며 이때 가장 편리하게 사용할 수 있는 함수가 FillRect이다. Rectangle 함수를 사용할 수도 있지만 이 함수는 경계선을 그리기 때문에 펜과 브러시를 모두 같은 색으로 맞추어야 하고 두 오브젝트를 모두 DC에 먼저 선택해야 하므로 훨씬 더 번거롭다.

참고함수

Rectangle, PatBlt

플랫폼

95이상

참조

 


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