CRgn 클래스는 윈도우 영역 자체를 객체화한 클래스이다.
다음은 CRgn 클래스를 이용한 코드이다.


void CTextRgnView::OnPaint()
{
 CPaintDC dc(this); // device context for painting

 CRect RectLeft = CRect(50,50,250,150);
CRect RectRight  = CRect(250,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);

// DC 의 폰트 설정을 바꾼다.
LOGFONT lf;
::ZeroMemory(&lf, sizeof(lf));
lf.lfHeight = 72;
wsprintf(lf.lfFaceName, _T("%s"), _T("Arial"));

CFont Font;
Font.CreateFontIndirect(&lf);
CFont *pOldFont = dc.SelectObject(&Font);
dc.SetBkMode(TRANSPARENT);
//dc.TextOut(60,65,_T("TEST STRING");

// 왼쪽 영역을 선택하여 문자열을 출력한다.
dc.SetTextColor(RGB(192,192,192));
dc.SelectClipRgn(&rgnLeft); //rgnLeft 를 벗어난 문자열은 출력되지 않는다.
dc.TextOut(60,65,_T("TEST STRING"));

// 오른쪽 영역을 선택하여 문자열을 출력한다.
dc.SetTextColor(RGB(192,0,0));
dc.SelectClipRgn(&rgnRight); //rgnRight 를 벗어난 문자열은 출력되지 않는다.
dc.TextOut(60,65,_T("TEST STRING"));

dc.SelectObject(pOldFont);


}



다음은 이미지를 투명하게 해놓고 마우스 왼쪽 버튼을 누루면서 움직이면 200범위로 불투명하게 보이는 코드다.

void CImageRgnView::OnPaint()
{
 CPaintDC dc(this); // device context for painting

 m_ImgSample.AlphaBlend(dc.m_hDC, 0,0,50);

 CRgn Rgn;
 Rgn.CreateEllipticRgn(m_rectVisible.left, m_rectVisible.top, m_rectVisible.right, m_rectVisible.bottom);
 dc.SelectObject(&Rgn);

 m_ImgSample.BitBlt(dc.m_hDC, 0,0);

}


void CImageRgnView::OnMouseMove(UINT nFlags, CPoint point)
{
 
 if(nFlags & MK_LBUTTON) //왼쪽 버튼을 누루면서 움직였는지 체크, 비트연산한다.
 {
  m_rectVisible = CRect(point.x - 100, point.y - 100, point.x + 100, point.y + 100);
  //앞뒤, 옆옆으로 100씩 2번이니까 200의 차이가 난다.
  RedrawWindow();
 }

 CView::OnMouseMove(nFlags, point);
}


void CImageRgnView::OnLButtonUp(UINT nFlags, CPoint point)
{

 m_rectVisible = CRect(0,0,0,0);
 RedrawWindow();

 CView::OnLButtonUp(nFlags, point);
}

곰플레이어 스킨같은거 만드는 방법

CRgn 클래스를 이용해서 만들면 된다. 다음은 기초 코드이다.
CMainFrame 클래스에 OnCreate() 에서 작성하면 된다.


m_RgnRect1.CreateRectRgn(0,0,100,100);
m_RgnRect2.CreateRectRgn(70,70,170,170);
m_RgnRect3.CreateRectRgn(0,0,0,0);

m_RgnRect3.CombineRgn(&m_RgnRect1, &m_RgnRect2, RGN_XOR);

SetWindowRgn( (HRGN)m_RgnRect3, TRUE);

'Windows > MFC' 카테고리의 다른 글

RGB 와 CMYK, HSV, HLS  (0) 2011.11.15
ATL, STL, COM 은 무엇인가?  (0) 2011.11.15
윈도우 화면 캡쳐하기  (0) 2011.11.14
CImage 클래스  (0) 2011.11.14
고급 이미지 출력 함수 ( TransparentBlt() , AlphaBlend() )  (0) 2011.11.14

+ Recent posts