페이지수가 아마 젤 많은. GDI관련 내용.
DC는 Device Context 의 준말이다
프로젝트 제목은
RedrawDemo 로 하고 다음의 코드를
클래스 뷰 -> 메시지 핸들러 함수를 추가한 뒤
아래와 같이 코드를 짜면
///////////////////////////////////////////////////////////////////////
DC는 Device Context 의 준말이다
프로젝트 제목은
RedrawDemo 로 하고 다음의 코드를
클래스 뷰 -> 메시지 핸들러 함수를 추가한 뒤
아래와 같이 코드를 짜면
///////////////////////////////////////////////////////////////////////
void CRedrawDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CDC* pDC = GetDC(); //DC를 얻는다
pDC->Rectangle(10,10,110,110); //주어진 좌표에 네모를 그린다.
ReleaseDC(pDC); //DC를 반환한다.
CView::OnLButtonDown(nFlags, point);
}
////////////////////////////////////////////////////////////////////////////
윈도우 내부에서 마우스 클릭시에 사각형이 그려진다.
하지만 이 사각형은 다른 윈도우에 가려지거나
화면 밖으로 갈 경우 그림이 가려진 채 복구가 되지 않는다.[다시 클릭을 하면 그려지긴 한다.]
또한 윈도우의 크기를 변경하면 삭제되어버리기도 한다.
이 문제를 해결하기 위해서
WM_PAINT 메시지 핸들러 함수를 뷰 클래스에 등록하여 다음과 같은 코드를 추가 수정해주면.
처음 작성했던 사각형과 달리 계속 그 모양이 유지되는 사각형이 그려지게 된다.
이는 OnPaint 함수에 그 코드가 있기 때문에 지속적으로 화면에 다시그려지기 때문이다.
위의 코드와 아래 코드에서의 차이점은 위는 DC를 할당하거나 반환하는 코드가 있는 반면 아래에서는
CPaintDC 로 쓰여있다.
이는 OnPaint()함수 내부에 이미 들어있는 코드이기 때문이므로 없다고 해서 어리둥절 해 할 필요는 없다.
/////////////////////////////////////////////
CDC 클래스
WMF와 EMF?
다른 설명
////////////////////////////////////////////////////////////////////////////
윈도우 내부에서 마우스 클릭시에 사각형이 그려진다.
하지만 이 사각형은 다른 윈도우에 가려지거나
화면 밖으로 갈 경우 그림이 가려진 채 복구가 되지 않는다.[다시 클릭을 하면 그려지긴 한다.]
또한 윈도우의 크기를 변경하면 삭제되어버리기도 한다.
이 문제를 해결하기 위해서
WM_PAINT 메시지 핸들러 함수를 뷰 클래스에 등록하여 다음과 같은 코드를 추가 수정해주면.
void CRedrawDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
dc.Rectangle(120,10,220,110);
}
/////////////////////////////////////////////////////////////////처음 작성했던 사각형과 달리 계속 그 모양이 유지되는 사각형이 그려지게 된다.
이는 OnPaint 함수에 그 코드가 있기 때문에 지속적으로 화면에 다시그려지기 때문이다.
위의 코드와 아래 코드에서의 차이점은 위는 DC를 할당하거나 반환하는 코드가 있는 반면 아래에서는
CPaintDC 로 쓰여있다.
이는 OnPaint()함수 내부에 이미 들어있는 코드이기 때문이므로 없다고 해서 어리둥절 해 할 필요는 없다.
/////////////////////////////////////////////
CDC 클래스
CClientDC : 윈도우의 클라이언트 영역으로 한정되는 DC입니다. CWindowDC : 윈도우의 모든 영역(비 클라이언트 영역 포함) 에 대한 DC입니다. 이 DC를 이용하면 다른 윈도우에 대해서 그리기가 가능합니다. CPaintDC : CClientDC 클래스와 유사하지만, 내부적으로 BeginPaint()/EndPaint() 함수를 호출하여 WM_ERASEBKGND 메시지가 발생한다는 것이 다릅니다.[?? 뭔메시지인지는 모르겠으면 비쥬얼 C++에서 클래스뷰를 통해 알아봅시다. [ - 창 배경을 지워야 함을 알려주는 메시지 핸들러 -] CMetaFileDc : WMF(Window Meta File)와 EMF(Enhanced Meta File) 파일에 대한 DC입니다. |
WMF와 EMF?
다른 설명
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 7 GDI - 3 (0) | 2011.12.01 |
---|---|
Visual C++ 2008 MFC Chapter 7 GDI - 2 (0) | 2011.12.01 |
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 3 (4) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 2 (0) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 1 (0) | 2011.11.30 |