PatBlt

원형

BOOL PatBlt(HDC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, DWORD dwRop);

MFC 원형

BOOL CDC::PatBlt( int x, int y, int nWidth, int nHeight, DWORDdwRop );

인수

▶hdc : DC의 핸들

▶nXLeft, nYLeft : 채색을 시작할 좌상단 좌표. 논리 좌표이다.

▶nWidth, nHeight : 채색할 사각 영역의 넓이와 높이

▶dwRop : 채색 방법을 지정하는 플래그이며 다음 중 하나의 플래그를 지정해 준다. 이 플래그들은 현재 DC에 선택되어 있는 브러시의 색상과 화면에 이미 출력되어 있는 그림의 색상을 어떻게 혼합할 것인가를 지정한다.

플래그

설명

PATCOPY

DC에 선택되어 있는 브러시의 색상을 그대로 출력한다.

PATINVERT

브러시의 색상과 화면의 색상을 XOR 연산한다.

DSTINVERT

화면의 색상을 반전시킨다.

BLACKNESS

팔레트의 0번 색상으로 채운다. 보통 검정색이다.

WHITENESS

팔레트의 1번 색상으로 채운다. 보통 흰색이다.

 

리턴

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

설명

지정한 사각 영역을 채색하되 현재 DC에 선택되어 있는 브러시와 화면의 색상을 논리 연산한다. 논리 연산의 종류에 따라 두 색상을 다양하게 혼합할 수 있다. 비트맵 브러시가 선택되어 있다면 이 함수로 비트맵을 출력할 수도 있다. 모든 장치가 이 함수를 다 지원하는 것은 아니므로 GetDeviceCaps 함수의 RC_BITBLT 인덱스로 이 함수가 지원되는지를 먼저 조사한 후 사용해야 한다.

예제 1

다음 예제는 중앙에 노란색 원을 그리고 4방향으로 파란색 사각형을 겹쳐서 채색하되 ROP 모드를 각각 다르게 하여 출력함으로써 ROP 연산을 결과를 살펴볼 수 있도록 하였다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HBRUSH hBrYellow, hBrBlue, hBrOld;
	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		hBrYellow=CreateSolidBrush(RGB(255,0,255));
		hBrBlue=CreateSolidBrush(RGB(0,0,255));
		hBrOld=(HBRUSH)SelectObject(hdc,hBrYellow);
		Ellipse(hdc,100,100,400,300);

		SelectObject(hdc,hBrBlue);
		PatBlt(hdc,200,50,100,100,PATCOPY);
		PatBlt(hdc,200,250,100,100,PATINVERT);
		PatBlt(hdc,50,150,100,100,DSTINVERT);
		PatBlt(hdc,350,150,100,100,BLACKNESS);

		SelectObject(hdc,hBrOld);
		DeleteObject(hBrYellow);
		DeleteObject(hBrBlue);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

ROP 연산의 결과는 다음과 같다.

PATCOPY로 출력한 12시의 사각형은 브러시의 색상으로 출력되었으며 PATINVERT로 출력한 6시의 사각형은 화면색상과 브러시의 색상을 XOR 연산한 결과가 출력된다. DSTINVERT는 브러시의 색상과는 상관없이 화면의 색상을 반전시키며 BLACKNESS는 검정색으로 출력된다.

참고함수

FillRect

플랫폼

95이상

참조

 


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