방법 1
App의 InitInstance에서 AllocConsole()을 호출한다.
디버그 모드에서만 동작할 것이므로 간단히 다음과 같이 할 수 있겠다.

#ifdef _DEBUG
    if( !AllocConsole() )
    {
        AfxMessage(_T("Failed to create the console!"), MB_ICONEXCLAMATION);
    }
#endif

해제하기 위해서는 ExitInstance에서 FreeColsole()을 호출한다.
이전과 마찬가지로 다음과 같이 쓰면 된다.

#ifdef _DEBUG
    if( !FreeConsole() )
    {
        AfxMessage(_T("Failed to free the console!"), MB_ICONEXCLAMATION);
    }
#endif

방법 2
stdafx.h에서 다음과 같이 입력한다.

#ifdef _DEBUG
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif


출력은 일반적인 콘솔 프로그램과 같이 cout이나 printf 등을 사용하면 된다.


출처 : http://darkblitz.tistory.com/101

원인은 이미 생성 된 폰트를 다시 생성 시(CreateFontIndirect) 생기는 에러로, 폰트가 생성 되어 있는 경우에 삭제하는 로직을 추가 출처 : http://m.blog.naver.com/hosup123/150181404998

MFC에서 무언가 그리고 화면에 표현 할때 화면에 변화를 주고 싶다고 할때 쓰이는 함수가 Invalidate 함수인데 이함수는 화면을 갱신할때 즉 WM_PAINT 와 같은 메시지를 호출해준다.


그런데 Invalidate에 인자로 TRUE와 FALSE가 있는데 이둘의 차이점은 다음과 같다.

Invalidate(FALSE)  ->  WM_PAINT
Invalidate(TRUE)   ->  WM_ERASEBKGND   -> WM_PAINT

 FALSE 인자는 백그라운드(현재 그려저 있는 거 포함)를 지우지 않고 그냥 그린다.
TRUE는 백그라운드를 다 지우고 그린다.

FALSE같은 경우는 한영역에서 그림이 많이 변화하는 애니메이션을 재생할때 많이 이용된다.(어짜피 그 부분만 변화하게 되므로)

TRUE는 화면에서 여러 컨트롤의 위치나 크기등의 변화가 있을때 쓰인다. FALSE를 쓰면 이동하기 전의 그림이 남아있기 때문이다.


출처 : http://taessing.tistory.com/86

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

[디버그] MFC에서 콘솔창 띄우기  (0) 2016.10.12
[화면 갱신] Invalidate(FALSE/TRUE)  (0) 2016.10.11
[폰트] 폰트 설정  (1) 2016.10.11
[버튼] 버튼 텍스트 변경  (0) 2016.10.11
[라디오] 라디오 선택하기  (0) 2016.10.10
1. 다이얼로그에서 첫번째 버튼 속성에서 Group = True 로 지정 2. 마지막 버튼 속성 Group = False 로 지정


+ Recent posts