Win32API 기본

 

< 강의 내용 정리 >

 

운영체제도 프로그램, 제일 먼저 시작 되는 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
  Comments