[Study]/[MFC]2009. 10. 6. 07:01
출처 : http://tong.nate.com/navy9370/30050194

출처 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=8144&ref=8144

아래 항목만 다 알면 코딩하는데 많은 도움이 되리라 생각됩니다.

저도 사실 전부 모릅니다 ㅡㅡ;;

너무 많은 걸~~




출처 : Tong - navy9370님의 MFC통
Posted by xiasonic
TAG mfc

댓글을 달아 주세요

[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
TAG CDC, HDC, mfc

댓글을 달아 주세요

[Study]/[MFC]2009. 9. 29. 19:58

비주얼C 를 사용하다보면

인텔리센스가 안먹거나, 클래스뷰에 클래스와 멤버변수들이 제대로 출력되지 않는 경우가 있다. 

이럴 때는 프로젝트 폴더로 들어가서...

ncb, opt, plg 파일 세 개를 삭제해준다음에 다시 프로젝트를 열면 됨.

 

Posted by xiasonic
TAG mfc

댓글을 달아 주세요

[Study]/[MFC]2009. 9. 29. 19:55
Invalidate()함수는 강제로 WM_PAINT메시지를 발생시키고, WM_PAINT메시지는 OnDraw()호출하여 화면을 다시 그린다.

Invalidate(true와 false)로 쓸수 있는데
true일땐 배경을 전부 지운후 그리는것이고
false일때는 변경된 부분만 다시 그린다.
Defaulte는 true
Posted by xiasonic
TAG mfc

댓글을 달아 주세요

[Study]/[MFC]2009. 9. 29. 19:46

CString str;
 str.Format(L"hi");

pDC->TextOutW(x,y,str);

여기서 중요한점...

CString부분에서
스트링을 넣을때 앞에 대문자 L을 해줘야 된다.
L"String"처럼...

이유는 프로젝트 생성시 영어로 하면 문제 없지만
한글로 설정하면
텍스트를 표시 할려면 저렇게 해야된단다...

역시나 M$의 죶같은....
가끔가다 외국에서 받은 라이브러리가 컴파일도 안되고 삽질하다보면
결국 언어 문제때문인적이 몇번 있었는데...

어떻게 된녀석인지 모르겠다...

정말 이런 면에서는 자바가 개발이 편한것 같다.
Posted by xiasonic
TAG mfc

댓글을 달아 주세요