[Study]/[MFC]2010. 6. 5. 06:05

"새 코드 요소를 반환하지 못했습니다. 구문 오류일 수 있습니다. 새 요소 이름: XXXXXXXXXXX"

젠장... VS2005에서 변수 추가 할려다가 컴이 버벅 거리길래 잠깐 프로젝트 닫았다가 켰다.

근데 한참이 지나도 인텔리센스 업뎃중이라면서 한참 다운이길래 그냥 꺼버렸다.

그후 변수 추가 눌러서 뭐든 추가 할려고 하면 저런 메세지가 뜬다...

VS6.0일땐 저런 잡다한 버그들 많아서 특정 파일 지워주면 되는데

그냥 아무생각없이 프로젝트 폴더에서 C, H확장자를 제외하고 정말로 아무 생각없이 다 지워버렸다
- _- 망함...

결국 백업해논걸로 복구하긴 했지만

보통 저런경우에는

1. 프로젝트를 닫기 한다.
2. 확장자가 ncb파일을 지우던지 백업하던지 한다.(파일명을 살짝 바꾸어 주는것을 추천한다. 나는 .bb로 바꾼다)
3. 다시 프로젝트를 열어서 테스트를 해본다.



아마도 vs에서 ncb파일이 인텔리센스랑 뭐 그런 정보들 들어있는것 같다.

저 파일을 지우고 다시 프로젝트를 열면 오랜시간 업뎃을 하는 것을 알 수 있다.

'[Study] > [MFC]' 카테고리의 다른 글

[MFC] TIP  (0) 2009.10.06
MFC에서 CDC얻기  (0) 2009.10.05
[MFC] VC 6.0 의 클래스 뷰나 인텔리센스가 병맛일때  (0) 2009.09.29
[MFC] Invalidate()함수 화면 갱신  (0) 2009.09.29
[MFC] TextOutW 유니코드 문자 출력  (0) 2009.09.29
Posted by xiasonic
[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
[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
[Study]/[MFC]2009. 9. 29. 19:58

비주얼C 를 사용하다보면

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

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

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

 

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

Invalidate(true와 false)로 쓸수 있는데
true일땐 배경을 전부 지운후 그리는것이고
false일때는 변경된 부분만 다시 그린다.
Defaulte는 true
Posted by xiasonic
[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