오늘의 TIL 목차 (22. 09. 29)
- API 개념
- 윈도우 초기화
API 개념
[ API ]
: Application Programming Interface, 인터페이스는 컴퓨터와 사람 간의 연결 고리 ( 키보드, 모니터 등 )
[ Handle, 핸들 ]
: OS 보호 차원에서 응용프로그램이 바로 OS 자원의 주소값을 접근하는 것이 아니라 핸들값을 제공하는 것

[ WM ]
: Window Message, 윈도우는 메세지 기반
[ DC ]
: 출력에 관한 정보를 갖고 있는 데이터 구조체, GDI가 관리하며 어떤 포인트(점)인지 선의 색상, 굵기, 무늬 등 그리기와 관련된 정보를 가진다. => hdc는 도화지라고 생각하면 된다.
윈도우 초기화
[ wWinMain ]
: 윈도우의 메인 함수

[ CALLBACK wndProc ]
함수: WndProc(HWND, UINT, WPARAM, LPARAM)
목적: 주 창의 메시지를 처리합니다.
- 기본 구성 요소 -
WM_COMMAND - 응용 프로그램 메뉴를 처리합니다.
WM_PAINT - 주 창을 그립니다.
WM_DESTROY - 종료 메시지를 게시하고 반환합니다.
CALLBACK : 함수 포인터의 콜백 기능과 같으며 __stdcall 함수 호출 규약을 사용하는데 이를 매크로화한 것
=> CALLBACK WndProc( ~ ) 으로 쓰임

switch(message) {
case WM_CREATE: // 윈도우 창 생성 시 실행
SetTimer(hWnd, 0, 0, 0); // 갱신 주기 함수
break;
case WM_TIMER: // SetTimer 실행 시 실행
InvalidateRect(hWnd, 0, true); // 잔상 노출 여부 함수
break;
case WM_PAINT: // InvalidateRect() 함수 실행 시 실행
// WM_PAINT 안의 코드는 SetTimer에 의해
// InvalidateRect가 지정한 갱신 범위만큼 계속해서 갱신됨
break;
case WM_KEYDOWN: // 키를 입력받으면 실행
switch(wParam) // 입력한 키보드의 주소는 wParam으로 넘겨짐
{
case VK_ESCAPE: // 키보드마다 각각의 주소에 맞는 매크로명이 존재
break;
...
}
break;
case WM_DESTROY: // 종료 메세지를 게시하고 반환
PostQuitMessage(0);
break;
=> window는 메세지를 엄청나게 빠른 속도로 계속 받고 있으며,
받은 메세지를 SetTimer의 시간 주기로 PAINT에서 새로 그리는 것
총알 원리 ( 윈도우 초기화ver )


- wndProc 안의 함수는 엄청난 속도로 계속해서 메세지를 받고 있음
- 받은 메세지 중 setTimer의 시간 주기만큼 PAINT를 실행
- SPACE 키를 누른다면 rcBullet 원소 하나 listRec 리스트에 대입
- 스페이스바 한 번 기준 listRec에는 원소 하나밖에 없지만 PAINT에선 메세지를 계속 받아 계속 갱신(그리기)를 하기 때문에 원소가 실시간으로 -= 10만큼 계속 이동 ( 잔상 여부를 false로 한다면 잔상이 남아 여러겹으로 보임 )
'C++' 카테고리의 다른 글
| [TIL 39장] TimeDelta, find_if문과 함수 객체, 뷰 스페이스 변환의 행렬 원리(월드행렬) (0) | 2022.12.07 |
|---|---|
| [TIL 35장] 포물선 공식, 직선의 방정식 (0) | 2022.10.12 |
| [TIL 33장] R-value 레퍼런스( feat. move() ), 이동 생성자 (0) | 2022.09.26 |
| [TIL 32장] C++ 11 주요 함수 - 유니폼 초기화, auto, 범위 지정 for문, 람다식, try-catch문 (0) | 2022.09.22 |
| [TIL 32장] 트리 & 해시 자료구조, map(feat. unordered map, multimap), mutable (0) | 2022.09.22 |