< 강의 내용 정리 >
운영체제도 프로그램, 제일 먼저 시작 되는 OS에 얹혀서, 실행될 프로그램을 WinAPI32를 통해 만든다
// Global Variables
WCHAR 타입 : 2바이트 wchar_t 재정의
wWinMain 함수 : 프로그램이 실행될때 처음으로 진입 될 첫 함수
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
아무 의미가 없는 두 함수 -> 컴파일러가 무시
HINSTANCE hInstance: 프로세스가 시작되는 메모리 주소
HINSTANCE hPrevInstance : 먼저 시작된 이전 프로세스의 시작 주소 ( 초창기 윈도우 )
윈도우는 가상메모리를 사용한다
사용자로 하여금 윈도우는 각 프로그램마다 고유한 자기만의 영역이 있다고 만듦, 메모리를 가상으로 잡아줌 ( 물리적으로는 다르지만 )
_In_ LPWSTR lpCmdLine : 프로그램 실행할때 추가적인 인자로 문자열(명령어)를 넣는다면 이 변수로 받아올수 있다
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_CLIENT, szWindowClass, MAX_LOADSTRING);
전역 변수 szTitle과 szWindowClass를 초기화
MyRegisterClass(hInstance); : 구조체 멤버들을 채워서 윈도우 함수 실행, 즉 윈도우 정보 등록
InitInstance (hInstance, nCmdShow) : 윈도우 생성
프로세스는 윈도우가 아니다
프로그램을 실행시키면 하나의 프로세스(ex 그림판)로 OS가 관리하게 되는데,
윈도우는 인터페이스 역할을 하는것
특정 프로세스는 윈도우를 가질수도 안가질수도 있다
< 강의 내용 정리 >
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CLIENT));
단축키 테이블 정보 로딩
MSG msg;
메세지 구조체
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
while은 무한 반복문을 돌고 있음
TranslateAccelerator(msg.hwnd, hAccelTable, &msg)
단축키 테이블에 등록되어있는 키가 눌렸거나 확인해주는 부분 ( 윈도우가 동작 )
GetMessage(&msg, nullptr, 0, 0)
OS 입장에선 모든 프로세스를 관리한다
메세지 queue라는곳에 메세지가 쌓여감
수많은 프로세스 중에서 현재 focus된 프로세스가 있을것임
이때, 발생하는 메세지들은 focus된 프로세스로 들어온 순서대로 넣어줌
즉 GetMessage 함수는 해당 프로그램 쪽으로 발생한 메세지들을 꺼내보는것
msg 구조체에 관련 정보들을 넣어줌
참고로 GetMessage 함수는 메세지큐에서 메세지 확인할때까지 대기한다
만약? GetMessage가 false를 반환하면 main 함수가 끝나게 된다..
-> GetMessage 함수는 msg.message == WM_QUIT 일때만 false를 반환함 ( 프로그램 종료를 의미 )
TranslateMessage(&msg);
DispatchMessage(&msg);
위의 함수를 통해 받아온 메시지들(msg)을 처리함
msg.hwnd : 메세지가 발생한 윈도우
메세지가 발생한 윈도우 쪽에 WndProc 함수가 호출
WndProc(윈도우 프로시저)는 메세지가 들어오면 호출되고, 메세지에 따라 내용을 처리한다
즉 wWinMain 함수에서는 메세지를 전달하기만 함.
윈도우 프로시저는 WinMain에서 호출되는것이 아니라 윈도우에 의해서 호출됨 ( callback 함수 )
DefWindowProc(hWnd, message, wParam, lParam);
프로세스에서 처리하지 못한 메세지들은 따로 윈도우에서 처리하도록 하는 함수
윈도우 좌표
맨 왼쪽 위가 (0,0) 좌표를 가지고 있다

픽셀 하나하나는 메모리
Rectangle(hdc, 10, 10, 110, 110); 사각형을 그리는 함수
여기서 사용되는 숫자는 단위가 픽셀이다
'Win32API' 카테고리의 다른 글
Win32API Timer (0) | 2025.01.14 |
---|---|
Win32API Core 클래스(2) (0) | 2025.01.14 |
Win32API Core 클래스(1) - Singleton (0) | 2025.01.14 |
Win32API PeekMessage (0) | 2025.01.14 |
Win32API 핸들, DC, 윈도우 이벤트 (0) | 2025.01.14 |