Skip to content

Commit f829012

Browse files
committedMar 14, 2023
WinAPI추가
1 parent 3e7bce8 commit f829012

9 files changed

+50
-4
lines changed
 

‎_posts/2022-11-17-first.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ author_profile: false
99
# nav: "docs"
1010
---
1111
# 에셋 사이트의 문제
12-
![](images\2022-11-17-first\woman-1669197353470-5.png)
12+
![](\images\2022-11-17-first\woman-1669197353470-5.png)
1313

1414
Asset Store,sketchfab등 여러 모델링 사이트에서 모델링 에셋을 가져오시는 분들이 많을거라고 생각합니다
1515
저도 모델링 사이트에서 모델링을 가져와서 유니티에서 쓴적이 있는데요
@@ -40,4 +40,6 @@ Materials→Extract Materials을 누르고 아까처럼 추출할 폴더를 선
4040
폴더를 선택하고 기다리면 선택한 폴더에 추출된 메테리얼이 정렬된다
4141
![](/images\2022-11-17-first\스크린샷_20221123_055645.png)
4242
방금 비활성화 되어있던 메테리얼을 보면 활성화되어있는 것을 알 수 있다
43-
43+
![](/images\2023 -03-14-Third\메시지 루프.png)
44+
5. 메시지 루프: 마지막으로 메시지 큐에서 메시지를 하나씩 꺼낸다.
45+
이렇게 꺼낸 메시지는 메시지를 처리하는 WndProc() 함수에 보낸다.

‎_posts/2023-03-14-Third.md

+46-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ author_profile: false
1818
메인 부분은 이 신호를 하나씩 받아서 메시지처리 부분에 보냄
1919
**메시지 처리 부분**은 메시지를 받고 메시지에 약속된 반응을 나타냄.
2020
메시지에는 마우스의 움직임,키보드의 눌림,버튼 클릭 등 다양한 메시지가 있다
21+
## WinMain 구조
2122
```c++
2223
int APIENTRY wWinMain(_In_ HINSTANCE hIstance,
2324
_In_opt HINSTANCE hPrevInstance,
@@ -33,12 +34,55 @@ author_profile: false
3334
-프로그램 외부에서 내부로 값 설정
3435
4.nCmdShow: 윈도우가 화면에 출력될 때 형태를 정의함.이 값은 커널에 의해 넘어옴.
3536
-윈도우 출력에 의한 값
36-
WinMain() 작동 순서
37+
## WinMain() 작동 순서
3738
![](\images\2023 -03-14-Third\WinMain 작동순서.png)
3839
1.윈도우 구조체(WNDCLASSEXW)정의: 윈도우 클래스를 만든다.
3940
윈도우 클래스는 만들려는 윈도우의 속성을 저장하는 구조체이다.
4041
![](\images\2023 -03-14-Third\MyRegisterClass등록.png)
4142
2.구조체(MyRegisterClass) 등록: 구조체에 여러 속성을 저장한 후 이를 등록한다.
4243
이때 윈도우 클래스를 하나 이상 등록할 수 있는데,
4344
각각을 구분하려면 각 윈도우 클래스에 고유한 이름을 부여해야 한다.
44-
![](\images\2023 -03-14-Third\CreateWindow.png)
45+
![](\images\2023 -03-14-Third\CreateWindow.png)
46+
3. CreateWindow 메모리에 윈도우 생성: 윈도우 클래스를 등록하면 윈도우를 만들 수 있다.
47+
윈도우를 만들 때는 반드시 등록된 윈도우 클래스 중 하나를 사용할 윈도우 클래스로 지정한다.
48+
![](\images\2023 -03-14-Third\윈도우 출력.png)
49+
4. 윈도우 출력: 화면에 나타난 윈도우에서 다양한 이벤트가 발생하는데,
50+
이에 대한 메시지는 커널에의해 프로그램으로 전달된다.
51+
여러 이벤트가 연속해서 발생하므로 많은 메시지가 동시다발적으로 들어오고,
52+
도착한 메시지는 메시지 큐에 차례로 저장된다.
53+
![](/images\2023 -03-14-Third\메시지 루프.png)
54+
5. 메시지 루프: 마지막으로 메시지 큐에서 메시지를 하나씩 꺼낸다.
55+
이렇게 꺼낸 메시지는 메시지를 처리하는 WndProc() 함수에 보낸다.
56+
57+
## WinProc() 기본 구조
58+
### -윈도우 메시지 종류
59+
![](\images\2023 -03-14-Third\WM_PAINT.png)
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+
![](\images\2023 -03-14-Third\메시지 루프와 메시지 처리 함수 순서.png)
68+
![](\images\2023 -03-14-Third\서처리 순.png)
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+
![](\images\2023 -03-14-Third\GetMessage.png)
81+
메시지 큐에서 대기중인 메시지를 꺼내 첫 번째 인수로 전달된 msg 구조체에 복사한다.
82+
그리고 이 메시지를 큐에서 제거하고 true를 리턴한다.
83+
큐에서 가져온 메시지가 WM_QUIT()이면 false를 리턴하여 메시지 루프를 탈출(프로그램 종료)를 할 수 있도록 한다.
84+
## 2) PeekMessage:
85+
![](\images\2023 -03-14-Third\PeekMessage.png)
86+
- 메시지 큐에 메시지가 있으면 true를 리턴,없는 경우 false를 리턴한다. 즉,PeekMessage에는 대기 타임이 없다.
87+
- GetMessage에서는 타이머(WM_TIMER)를 설정하여 업데이트를 할 수 있지만 타이머 메시지는 모든 메시지 중에서 우선 순위가 가장 낮고 최대 속도가 0.01초이다.
88+
- PeekMessage를 사용하면 CPU의 모든 능력을 동원하여 업데이트를 할 수 있다.
46.2 KB
Loading
66.3 KB
Loading

‎images/2023 -03-14-Third/WM_PAINT.png

88 KB
Loading
69.4 KB
Loading
Loading
77.9 KB
Loading
28.5 KB
Loading

0 commit comments

Comments
 (0)
Please sign in to comment.