본문 바로가기
프로그래밍/MFC

MFC-TextRgn( 게이지에 따른 텍스트 변화 )

by 리뷰하는 (게임)프로그래머_리프TV 2010. 5. 19.


프로그램을 인스톨 할때라던가,

특정 게이지가 오르락 내리락 할 때 그 안에 글씨를 상황에 맞춰서 색상 변경을 해주어야 한다.


만약 저안에 글자가 처음엔 빨강색 이였다가, 빨간색 배경이 들어 오면 흰색으로 변경하는 거라고 치자.

그에 따른 소스코드를 파악해 가면서

프로그래머는 역시 사기꾼 이라는 생각이 드는 예제인거 같다.

먼저 실행 결과를 보자.



마치 게이지의 위치에 따라서 글자가 자연스럽게 색상이 변경하는 '것'처럼 보인다.

소스를 보자.

	CRect rectLeft = CRect( 50, 50, RgnSize, 150 );
	CRect rectRight( RgnSize, 50, 450, 150 );

	dc.FillSolidRect( &rectLeft, RGB( 192, 0, 0 ) );
	dc.FillSolidRect( &rectRight, RGB( 192, 192, 192 ) );

	CRgn rgnLeft, rgnRight;
	rgnLeft.CreateRectRgnIndirect( rectLeft );
	rgnRight.CreateRectRgnIndirect( rectRight );

	LOGFONT lf;
	::ZeroMemory( &lf, sizeof( lf ) );
	lf.lfHeight = 72;
	wsprintf( lf.lfFaceName, _T("%s"), _T("Arial Black") );
	CFont NewFont;
	NewFont.CreateFontIndirect( &lf );
	CFont* pOldFont = dc.SelectObject( &NewFont );

	dc.SetBkMode( TRANSPARENT );

	dc.SetTextColor( RGB( 0, 192, 192 ) );
	dc.SelectClipRgn( &rgnLeft );
	dc.TextOut( 60, 65, TEXT("TEST STRING") );

	dc.SetTextColor( RGB( 192, 0, 100 ) );
	dc.SelectClipRgn( &rgnRight );
	dc.TextOut( 60, 65, TEXT("TEST STRING") );

	dc.SelectObject( pOldFont );​



하나하나 집어 가면서 설명을 하자면,
소스에 있는 RgnSize View클래스의 int형 멤버 변수이다.(초기값 250)

	CRect rectLeft = CRect( 50, 50, RgnSize, 150 );
	CRect rectRight( RgnSize, 50, 450, 150 );​


무슨 짓을 할지는 모르겠지만, 최초 2개의 Rect를 사용해 사각 영역을 생성해 주었다.
수치를 보니 2개의 사각형을 연달아 그려주고 있다.
여기서 부터 사기는 시작된다.

	dc.FillSolidRect( &rectLeft, RGB( 192, 0, 0 ) );
	dc.FillSolidRect( &rectRight, RGB( 192, 192, 192 ) );​


각각의 사각 영역에 다른 색상을 지정해 주었다.

	CRgn rgnLeft, rgnRight;
	rgnLeft.CreateRectRgnIndirect( rectLeft );
	rgnRight.CreateRectRgnIndirect( rectRight );​


2개의 사각 영영에 대해서 별도의 영역을 만들어 주고 있다.

	LOGFONT lf;
	::ZeroMemory( &lf, sizeof( lf ) );
	lf.lfHeight = 72;
	wsprintf( lf.lfFaceName, _T("%s"), _T("Arial Black") );
	CFont NewFont;
	NewFont.CreateFontIndirect( &lf );
	CFont* pOldFont = dc.SelectObject( &NewFont );​


다음으로 글자 폰트의 크기, 글꼴을 지정한 후 폰트를 생성하였다.

	dc.SetBkMode( TRANSPARENT );

	dc.SetTextColor( RGB( 0, 192, 192 ) );
	dc.SelectClipRgn( &rgnLeft );
	dc.TextOut( 60, 65, TEXT("TEST STRING") );

	dc.SetTextColor( RGB( 192, 0, 100 ) );
	dc.SelectClipRgn( &rgnRight );
	dc.TextOut( 60, 65, TEXT("TEST STRING") );

	dc.SelectObject( pOldFont );
​


마지막으로 글자를 출력해 주고 있는데,
코드를 보면 알겠지만 글자를 2번 출력해 주고 있다. 한번은 rgnLeft에
한번은 rgnRight에 해주고 있다.

즉 2개의 사각 영역을 붙혀서 각각의 사각형에 영역을 만들고, 그 영역안에
다른 색상의 글자를 2번 출력 함으로써,
마치 하나의 글자가 자연스러운 색상변환이 이루어 지는거 같아 보이는 '것'일 뿐이다.

만약 사용자에 입력에 따라 사각 영역의 사이즈를 변경하고 싶다면(실행 화면처럼)
RgnSize 변수를 +,- 시켜 주는 것만으로 충분하다.(소스 생략)

'프로그래밍 > MFC' 카테고리의 다른 글

MFC-ImageRgn( 이미지의 특정 부분에 특수효과 삽입하기 )  (2) 2010.05.19
MFC-CImage( 스크린 샷 찍기 )  (0) 2010.05.17
MFC-CImage 클래스  (0) 2010.05.17
MFC-비트맵 띄우기  (0) 2010.05.16
MFC-가상 버튼 만들기  (0) 2010.05.16