1. GetMessage()
메시지 큐에서 메시지를 꺼내온다. 그리고 그 메시지를 TranslateMessage로 보내는데..
그런데 만약에 WM_QUIT를 만나면, false를 리턴하여 바로 while문을 탈출한다.
WM_QUIT를 만나지 않았다면, 그 메시지를 TranslateMessage로 보낸다.
2. TranslagteMessage()
가상 키를 키보드로 눌렀을때 문자열 값이면 WM_CHAR로 보낸다.
아니면 DispatchMessage로 보낸다.
3. DispatchMessage()
윈도우 메시지를 WndProc로 보낸다.
4. WM_TIMER
사용자의 동작과 상관없이 발생하는 메시지이다.
한번 지정해 놓으면 일정한 시간 간격을 두고, 연속적으로 계속 발생한다.
5. 타이머를 생성하는 함수
UINT SetTimer( HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc );
nIDEvent = 타이머의 번호
uElapse = 타이머의 주기 (단위는 1/1000 초)
lpTimerFunc = TimerPROC 콜백 함수의 주소 값.
5 - 1) 타이머를 제거하는 함수
BOOL KillTimer( HWND hWnd, UINT uIDEvent );
hWnd = 타이머를 소유한 윈도우의 핸들 값
uIDEvent = 타이머의 ID를 넣는다.
5 - 2) 현재 시간을 불러오는 함수
void WINAPI GetLocalTime( LPSYSTEMTIME lpSystemTime );
lpSystemTime = SYSTEMTIME의 구조체의 주소 값을 넣는다.
6. WM_LBUTTONUP, WM_LBUTTONDOWN
WM_LBUTTONUP : 마우스를 띄었을때 발생한다.
WM_LBUTTONDOWN : 마우스를 눌렀을때 발생한다.
7. WM_KEYDOWN, WM_CHAR 각각 설명과 차이점.
7 - 1) WM_KEYDOWN
nonsystem key가 눌러졌을때 키보드 포커스와 함께 해당 윈도우로 보내지는 메시지이다.
nonsystem key라고 하면 ALT를 누르지 않고, 그냥 키를 누른 것을 의미한다.
7 - 2) WM_CHAR
WndProc의 wParam에 해당 키의 문자 코드가 저장 된다.
8. WM_PAINT를 강제로 발생 시키는 함수와 인자에 대한 설명!!
InvalidateRect( hWnd, lpRect, true );
InvalidateRect( hWnd, NULL, false );
lpRect = 작업 영역
NULL = 화면 전체
ture = 그 영역을 싹다 지워서 다시 그린다.
false = 새로 작업하는 영역을 갱신되고, 나머지 영역은 그대로 둔다.
9. HDC를 얻는 2가지의 방법
1) HDC GetDC( HWND hWnd );
int ReleaseDC( HWND hWnd, HDC hDC );
2) HDC beginPaint( HWND hWnd, LPPAINTSTRUCT lpPaint );
BOOL EndPaint( HWND hWnd, CONST PAINTSTRUCT *lpPaint );
10. 강제로 윈도우를 종료 시키는 함수
PostQuitMessage();
11. DC( Device Context )
출력에 필요한 모든 정보를 가지는 데이터 구조체이다.
12. 마우스가 움직일때 발생되는 이벤트 메시지를 쓰고, 좌표 얻는 방법에 대한 설명!!
(이벤트 메시지)
WM_MOUSEMOVE
(좌표를 얻는 방법)
X = LOWORD(lParam)
Y = HIWORD(lParam)
13. 사각형의 충돌체크에 사용되는 함수를 쓰고, 각각의 인자를 설명!!
bool IntersectRect( &rc, &rcPlayer, &rcMonster );
(충돌이 아닐 경우) false IntersectRect( &rc, &rcPlayer, &rcMonster );
(충돌이 있을 경우) true IntersectRect( &rc, &rcPlayer, &rcMonster );
lpRect = 충돌 체크 할 사각형.
POINT = 충돌 체크 할 점(좌표).
14. 점과 사각형의 충돌 체크에 사용되는 함수를 쓰고, 각각의 인자를 설명 하시오.
bool PtInRect( lpRect, POINT );
(충돌이 아닐 경우) false PtInRect( lpRect, POINT );
(충돌이 있을 경우) true PtInRect( lpRect, POINT );
lpRect = 충돌 체크 할 사각형.
POINT = 충돌 체크 할 점 (좌표)
15. RECT
top, bottom, left, right (좌표)를 가진 구조체
16. 선
시작점 : MovetoEx( hdc, x, y, NULL );
끝 점 : LineTo( hdc, x, y );
원 형 : Ellipse( hdc, left, top, right, bottom );
사각형 : Ractangle( hdc, left, top, right, bottom );
문자열 입력 : TextOut( hdc, x, y, "문자열", strlen("문자열") );
17. 클라이언트 영역이란?
작업이 진행되는 작업 영역을 뜻 한다.
즉! 윈도우 영역에서 캡션바나 프레임부분을 뺀 영역이라고 말할 수 있다.
18. 윈도우 구조 5단계
WndClass 정의 - 윈도우를 정의한다.
RegisterClass - 윈도우를 등록한다.
CreateWindow - 윈도우를 만든다.
ShowWindow - 윈도우를 보여준다.
메시지 루프 - 메시지를 처리한다.
19. CALLBACK WndProc (콜백함수)
보통 함수들은 운영체제가 제공하며, 프로그램에서는 이 함수들을 호출해서 운영체제의 서비스를 받는다.
즉, 응용 프로그램이 운영체제에 내장된 함수를 호출하여 작업을 한다.
콜백함수의 호출시점은 운영체제가 필요할때 호출하는 함수이다.
일반 함수와 다른 점을 명시하자.