HDC GetDC(HWND hWnd);
MSDN 명시
HDC GetDC(_In_ HWND hWnd);
DC는 주로 하나의 윈도우와 연관되는 출력 정보를 가진다.
GetDC 함수는 hWnd가 가리키는 윈도우에 적당한 DC를 만들어 그 핸들을 리턴한다.
DC도 메모리를 차지하므로 할당 후 해제 원칙이 반드시 준수되어야 한다.(ReleaseDC)
함수가 성공적으로 실행되면 리턴되는 값은 지정된 윈도우의 클라이언트 영역에 대한 DC의 핸들을 리턴.
함수가 실패하면 리턴되는 값은 NULL.
ReleaseDC 함수 포스트 링크
http://blog.naver.com/kojy258/80209104883
사용예제 포스트 링크
http://blog.naver.com/kojy258/80209103519
최소지원 클라이언트 - 윈도우 2000 프로페셔널(데스크탑 전용)
최소지원 서버 - 윈도우 2000 서버(데스크탑 전용)
필요 헤더 - Winuser.h(Windows.h에 포함)
필요 라이브러리 - User32.lib
필요 DLL - User32.dll
GetDC( ) 와 BeginPaint( ) 의 차이는 뭘까?
API 에서 기본적으로 메세지루프가 돌 때 GetMessage( ) 함수에서 메세지를 읽어들이고, 삭제를 반복한다.
이러한 메세지중 WM_PAINT 메세지는 윈도우에 무효화 현상이 생길때 발생한다.
WM_PAINT 메시지가 발생하는 경우로는 무효화 현상일 발생할 때 이다.
무효화란?
현재 그려진 이미지와 실제 이미지가 차이가 생길 뜻한다.
예를들어 다른 윈도우가 현재 윈도우를 가렸다가 치운다면 그리지 않던부분을 다시 그려줘야할 필요가 생긴다.
1) 윈도우가 처음 만들어져 사용자 눈에 보일 때
2) 윈도우가 다른 위도우에 가려졌다가 환원될 때
3) 윈도우의 크기를 조절할 때
4) 사용자의 함수호출에 의해 : Invalidate(), UpdateAllViews, InvalidateRect() 등
이때 WinProc( ) 함수에서 WM_PAINT 메세지 발생 시, BeginPaint 함수로 DC 를 얻어오는데, GetDC 로 사용할 순 없을까?
대답은 GetDC ㄴㄴ
이유인 즉, BeginDC( ) 함수가 실행될 때 내부적으로 WM_PAINT 메세지를 처리하고 윈도우를 유효화 상태로 만들기 때문.
만약 GetDC 를 사용하게 되면 WM_PAINT 메세지가 처리되지 않아 유효화 상태에서도 끈임없이 화면을 그리게 될 것이다.
즉, WM_PAINT 메세지가 발생 했을 때 사용하도록 만들어진 것이 BeginPaint( ) 함수.
이외에 따로 DC 만 얻어와야 할 때 쓰는 것이 GetDC 함수이다.
사용자정의 클래스에서 DC 얻기.
1. GetDC( ) 함수의 인자로 해당 윈도우의 핸들이 필요하다.
따라서 핸들정보를 전역적으로 사용하기위한 변수를 하나 선언.
2. InitInstance( ) 함수에서 CreateWindow 함수의 반환값인 핸들을 전역변수(extern 선언된 변수) 에 저장.
3. GetDC( ) 함수의 인자로 전역으로 선언해논 핸들을 인자값으로 줘서 DC를 가져옴.
소멸자기준으로 동적할당 해제보다는 함수로인해서 해제하면 디버깅을 할 수 있다.
define에 쓰이는 extern 변수는 전체에 쓸수 있다.
FPS : 초당 몇프레임을 표현할지 정해주는 것이다.
GetTickCount : rand보다는 정교하고 난수를 가져온다.
'back-end > C & API' 카테고리의 다른 글
window API를 시작 할려면 필히 외워야 할 것 (0) | 2023.07.21 |
---|---|
window api RECT 관련 API 함수들 (0) | 2023.07.21 |
window api GetCurPos, ScreenToClient (0) | 2023.07.21 |
window api wsprintf 와 swprintf의 차이점 (0) | 2023.07.21 |
리스트 간단 설명 요약 (0) | 2023.07.21 |