You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2.구조체(MyRegisterClass) 등록: 구조체에 여러 속성을 저장한 후 이를 등록한다.
42
43
이때 윈도우 클래스를 하나 이상 등록할 수 있는데,
43
44
각각을 구분하려면 각 윈도우 클래스에 고유한 이름을 부여해야 한다.
44
-

45
+

46
+
3. CreateWindow 메모리에 윈도우 생성: 윈도우 클래스를 등록하면 윈도우를 만들 수 있다.
47
+
윈도우를 만들 때는 반드시 등록된 윈도우 클래스 중 하나를 사용할 윈도우 클래스로 지정한다.
48
+

49
+
4. 윈도우 출력: 화면에 나타난 윈도우에서 다양한 이벤트가 발생하는데,
50
+
이에 대한 메시지는 커널에의해 프로그램으로 전달된다.
51
+
여러 이벤트가 연속해서 발생하므로 많은 메시지가 동시다발적으로 들어오고,
52
+
도착한 메시지는 메시지 큐에 차례로 저장된다.
53
+

54
+
5. 메시지 루프: 마지막으로 메시지 큐에서 메시지를 하나씩 꺼낸다.
55
+
이렇게 꺼낸 메시지는 메시지를 처리하는 WndProc() 함수에 보낸다.
56
+
57
+
## WinProc() 기본 구조
58
+
### -윈도우 메시지 종류
59
+

60
+
1.WM_PAINT: 화면 출력
61
+
2.WM_DESTROY: 윈도우 메모리에서 파괴될 때 발생함
62
+
3.WM_QUIT: 프로그램이 끝낼 때 발생하는 메시지
63
+
4.WM_LBUTTONDOWM: 마우스의 좌측 버튼 누를 경우 발생
64
+
5.WM_KEYDOWN: 키보드의 키를 눌렀을 때 발생
65
+
6.WM_CHAR: 키보드로부터 문자가 입력될 때 발생
66
+
7.WM_CREATE: 윈도우가 처음 만들어질 때 발생
67
+

68
+

69
+
1. 키보드, 마우스 등에 의해 이벤트가 감지된다
70
+
2. 발생한 이벤트를 윈도우 시스템이 감지한다
71
+
3. 이벤트 발생을 알린다. 이벤트 발생을 알리는 방식 중 정숫값인 메세지를 보내는 방식을 택한다.보내온 메시지가 메시지 큐에 차례로 쌓인다
72
+
4. WinMain() 함수는 메시지 큐에서 맨 앞에 대기 중인 메시지를 꺼낸다
73
+
5. 꺼낸 메시지를 해석해 메시지 처리 함수에 보낸다. 처리해야 할 메시지는 메시지 큐에 보관되고 반복해서 하나씩 차례대로 처리한다. GetMessage() 함수가 메시지 큐에서 메시지를 꺼낸다. 꺼낸 메시지는 msg변수에 저장하고 TranslateMessage() 함수로 변형한다.
74
+
- TranslateMessage(&Msg): 키보드 입력에 대한 메시지 함수
75
+
- DisPatchMessage(&Msg): 메시지를 처리하는 함수에 메시지를 보내는 함수. 메시지 전, WndProc에서 return받는 값 받을 때까지 대기
76
+
- WndProc(): DisPatchMessage에서 호출받는 CALLBACK 함수
77
+
6 메시지 처리 함수가 WndProc()라면 WndProc() 함수는 메시지를 받아서 반응을 보인다 반응은 주로 화면 출력으로 나타난다.
78
+
# GetMessage VS PickMessage
79
+
## 1) GetMessage:
80
+

81
+
메시지 큐에서 대기중인 메시지를 꺼내 첫 번째 인수로 전달된 msg 구조체에 복사한다.
82
+
그리고 이 메시지를 큐에서 제거하고 true를 리턴한다.
83
+
큐에서 가져온 메시지가 WM_QUIT()이면 false를 리턴하여 메시지 루프를 탈출(프로그램 종료)를 할 수 있도록 한다.
84
+
## 2) PeekMessage:
85
+

86
+
- 메시지 큐에 메시지가 있으면 true를 리턴,없는 경우 false를 리턴한다. 즉,PeekMessage에는 대기 타임이 없다.
87
+
- GetMessage에서는 타이머(WM_TIMER)를 설정하여 업데이트를 할 수 있지만 타이머 메시지는 모든 메시지 중에서 우선 순위가 가장 낮고 최대 속도가 0.01초이다.
88
+
- PeekMessage를 사용하면 CPU의 모든 능력을 동원하여 업데이트를 할 수 있다.
0 commit comments