'HDC'에 해당되는 글 1건

  1. 2009.10.05 MFC에서 CDC얻기
[Study]/[MFC]2009. 10. 5. 17:50

1. CDC클래스

CDC클래스는 응용 프로그램에서 화면을 컨트롤하는 핸들을 포함하고 화면에 관계되는 여러 함수를 내장하고 있는 클래스이다. 왜 이렇케 화면을 출력하는데 DC를 얻어야 하는가는 DC를 사용하지 않은 경우 인스턴스개념에서 벗어나기 때문이기도 한데 내가 프로그램할 응용프로그램의 좌표를 기본으로 하여 출력해주기 때문, 즉 상대좌표가 가능하기 때문이다. 만약 DC를 사용하지 않으면 내 응용프로그램 윈도우가 아닌 전체 화면을 기준으로 출력하기 때문에 작업하는데 머리아픈 일들이 많아진다. 그 외에도 하나의 선을 긋는대도 그에 따른 선의 정보를 일일이 정해주어야하기 때문이기도 하다.

 

기본 코딩의 개념

OnDraw()함수에 출력하는 테이터를 변수A고 입력하고 다른함수에서 변수A를 컨트롤하는 코딩을 한다음 Invalidate(TRUE);의 명령을 이용해 OnDraw()함수를 호출해 다시 화면에 출력함으로서 행해진다.(당연히 변수 A는 전역변수가 되야한다)

이는 고정된 위치에 데이터만 병경되는 형태와 화면에 그림이나 글자 등이 이동되는 형태(에니메이션)를 구현할수 있다.

 

2. CDC 클래스 얻기

  - CDC를 얻는 방법은 크게 4가지가 있다.

  2.1 OnDraw()나 OnPaint()함수를 이용하는 방법

    - 이 방법은 윈도우의 크기가 변하거나 다른 프로그램에 의해서 가려졌다가 다시 출력이 되어도 화면 출력이 변하지 않는다. 즉 응용프로그램에 상태가 변하면 WM_PAINT메시지가 호출되고 이 메시지에 의해서 OnDraw(), OnPaint()함수를 다시 호출하여 화면을 갱신하기 때문이다.(중요한 부분)

  2.2 GetDC를 이용하는 방법

    - 2.1의 OnDraw()나 OnPaint()함수 이외의 타 함수에서 DC를 얻는 방법이다. 이는 일시적인 출력이기 때문에 응용프로그램의 상태가 변화하면 WM_PAINT메시지가 호출되고 이 메시지에 의해서 OnDraw(), OnPaint()함수를 호출하여 갱신하여 사라진다.

    - 사용 형식은

        CDC *pDC = GetDC();

        출력 코딩

        ReleaseDC(pDC);

      CDC클래스를 이용해 포인터 pDC를 얻고(구지 포인트를 사용하지 않으셔도 된다.) GetDC()를 사용하여 타함수에서 사용할수 있게 해준다. 당연히 ReleaseDC()를 이용해 해제해주어야 한다. 필자는 ReleaseDC()를 사용하지 않아 리소스 과다 사용으로 프로그램이 도중 종료되는 경험이....

  2.3 CClientDC를 이용하는 방법

    - GetDC()와 같고 ReleaseDC()를 사용하지 않는다.

    - 사용 형식은

        CClientDC cdc(this);

  2.4 윈도 DC를 얻는 방법

    - 이는 응용프로그램 자체윈도우를 핸들링한다. 윈도우 기본틀을 바꾸고자 할때 사용하면 유용하다.

    - 사용형식은

        CWindowDC *pDC = GetWindowDC();

        출력 코딩

        ReleaseDC(pDC);

 

참고 자료(Visual C++ Programming Bible)


출처:  http://blog.naver.com/rfsoft/12003643946

         

Posted by xiasonic