SetBkMode

원형

int SetBkMode( HDC hdc, int iBkMode );

MFC 원형

int CDC::SetBkMode( int nBkMode );

인수

▶hdc : 대상 DC의 핸들

▶iBkMode : 혼합 모드를 설정하는 플래그이며 다음 둘 중 하나이다.

플래그 설명
OPAQUE

불투명한 배경을 사용한다. 그래서 SetBkColor에 의해 지정된 배경 색상에 의해 뒷쪽의 그림이나 무늬가 지워진다. 이 모드가 디폴트이다.

TRANSPARENT

투명한 배경색상을 사용한다. 그래서 문자를 출력한 후에도 배경이 바뀌지 않는다. 즉 문자 사이 사이의 여백에 있는 원래 배경이 지워지지 않는다.

리턴

성공할 경우 이전에 설정되어 있던 혼합 모드를 리턴하며 에러 발생시 0을 리턴한다.

설명

DC의 배경 혼합 모드(Mix Mode)를 설정한다. 혼합 모드란 새로 출력되는 문자열의 배경을 어떻게 처리할 것인가를 지정하는데 SetBkColor에 의해 설정된 배경색 또는 디폴트 배경색인 흰색으로 배경을 출력하는 OPAQUE와 문자열의 획 사이를 투명하게 처리하는 TRANSPARENT 두가지 방법이 있다. 디폴트 혼합 모드는 불투명 모드인 OPAQUE이므로 문자열의 배경 색상이 출력되나 이 모드를 변경하면 투명한 문자열을 출력할 수 있다.

예제 1

다음 예제는 각각의 혼합 모드로 두번 문자열을 출력해 본다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	char str1[]="불투명한 문자열";
	char str2[]="투명한 문자열";
	HBRUSH MyBrush, OldBrush;	

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		MyBrush=CreateSolidBrush(RGB(0,0,255));
		OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
		Rectangle(hdc,0,0,400,200);
		SelectObject(hdc,OldBrush);

		TextOut(hdc, 50,50,str1,lstrlen(str1));
		SetBkMode(hdc,TRANSPARENT);
		TextOut(hdc, 50,100,str2,lstrlen(str2));

		DeleteObject(MyBrush);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

파란색 배경의 사각형을 그려두고 이 배경에 문자열을 출력하였다. 첫번째 문자열은 디폴트 배경 모드인 OPAQUE로 출력하였으며 두번째 문자열은 SetBkMode로 TRANSPARENT 모드로 변경한 후 출력하였다. 예제의 실행 결과는 다음과 같다.

첫번째 문자열은 디폴트 배경 색상인 흰색이 문자열의 배경으로 사용되었지만 두번째 문자열은 배경 색상을 무시하고 투명하게 문자열을 출력하였다. 투명 모드로 출력한 문자열은 배경에 있는 그림, 비트맵, 무늬 등이 획 사이로 그대로 비쳐 보인다. 장식을 위한 문자열 출력이라면 투명 모드로 출력하는 것이 보기에 좋으나 출력 속도는 불투명 모드가 훨씬 더 빠르다.

혼합 모드는 문자열 출력뿐만 아니라 CreatePen으로 만든 실선, 쇄선 등의 선을 출력할 때 선 사이의 여백을 채우는 방법을 지정하기도 하며 무늬가 있는 브러시의 배경을 채울 때도 사용된다. 그러나 ExtCreatePen으로 생성한 펜은 이 모드에 영향을 받지 않는다.

참고함수

GetBkMode : 현재 설정되어 있는 혼합 모드를 조사한다.

플랫폼

95이상

참조

배경 모드에 대해서는 6-5-다 항을 참고한다.


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