본문 바로가기
WinAPI 32

03 WinAPI) 핸들과 DC(1)

by Dev_Hugh 2023. 11. 9.
728x90
반응형

Github에 공부한 내용을 올렸습니다! 그냥 다운받고 프로젝트 실행하면 바로 돌아갑니다. 주석을 통해 해당 부분이 어떤 의미고 WinApi32의 구조가 현재 어떤 구조인지 파악하기 쉽게 정리하고 있습니다!

항상 말하지만 RTFM이 최고입니다! MSDN을 꼭 보세요ㅠㅠ

 

깃헙 들어온 김에 follow도 해주시면 감사하겠습니다 ㅎㅎ

https://github.com/JinHyung16/WinApi

 

GitHub - JinHyung16/WinApi

Contribute to JinHyung16/WinApi development by creating an account on GitHub.

github.com


WinMain내 Message를 처리하는 부분을 보면 결국 현재 구조는 어떤 message를 받아 이를 메시지큐에 넣어 꺼내면서 어떤 윈도우에 해당하는 메시지인지 처리하는 방식이다. 그러면 본인이 만든 윈도우의 커스텀 기능을 넣고 싶다면 WindProc함수 내에서 수정하면 된다. WinProc은 윈도우 프로시저 함수로 콜백 함수다!

프로시저는 조작을 수행하기 위해 호출할 수 있는 프로그램을 의미한다. 그러면 윈도우 프로시저 함수의 역할은 메시지큐에 들어온 메시지들에 대한 조작을 수행하기 위한 함수임을 알 수 있다.

WinMain내 메시지 처리 함수

그러면 WinProc내 case 문에서 다음과 같이 제공하는 Rectangle 함수를 통해 사각형을 그릴 수 있다.

02 WinAPI) 여기에 가면 좌표에 대한 설명이 있는데 보고 오는걸 추천한다.

WinProc 함수 내 사각형 그리기 코드

MSDN을 보면 WM_PAINT는 Invalidate 영역이 발생한 경우 발생한다고 한다.

Invalidate 영역은 좋은 글들을 많이 보면 A창을 실행하고 B창을 띄우면 포커시잉 B인데 이때 A를 클릭하면 그 잘린 B영역만큼 다시 그림을 이야기하는데 최근 윈도우에선 A창을 완전히 내렸다가 다시 킬 때 이 때 무효화 되었다고 판정하여 이때 WM_PAINT가 호출된다. (이해하기 어려우면 WM_PAINT의 중단점 걸고 프로그램 실행한 뒤 다른 프로그램 실행하면서 막 이것저것 해보는걸 추천... 직접 해보니 한번에 이해가 됐습니닼ㅋ)

 

윈도우 프로그래밍은 대부분 OS에서 관리하는 커널 오브젝트다. 우리는 프로그래밍 때 이 윈도우 사이즈를 조작하려면 OS에게 윈도우 ID를 받아서 이를 통해 조작하는 개념이다.

 

WinProc내에 HDC외에도 HBRUSSH, HICON, HPEN등 커널 오브젝트의 ID를 받는 다양한 구조체가 존재한다. 그렇다면 왜? 이렇게 결국 커널오브젝트 ID만을 받는 구조체인데 구별해서 여러개를 만들었냐 우리는 이 커널 오브젝트의 ID를 받아서 처리해야 하는데 어떤 커널 오브젝트인지 구별하고자 다양한 커널 오브젝트를 받는 구조체들이 존재하는것이다.

커널 오브젝트는 Windows OS에서 리소스들을 관리하기 위한 데이터를 저장하는 메모리 블럭이다.

 

HDC는 Device Context 커널 오브젝트의 ID를 받는 구조체이다. Device Context는 그리기작업을 수행하기 위해 필요한 데이터 집합이다.

 

결론) WinAPI는 메시지큐에 있는 메시지를 통해 윈도우의 작업을 수행하는게 기본이다. 


OpenGL때도 그렇지만 기본은도형 그리기! ㅋㅋㅋㅋ

사각형이 점점 커지는 듯한 느낌으로 그려봤습니다.

사각형 그리기

 

728x90
반응형

'WinAPI 32' 카테고리의 다른 글

06 WinAPI) Singleton  (0) 2023.11.12
05 WinAPI) PeekMessage  (0) 2023.11.11
04 WinAPI) 핸들과 DC(2)  (0) 2023.11.10
02 WinAPI) 기본(2)  (0) 2023.11.07
01 WinAPI) 기본(1)  (0) 2023.11.06