메모내용
참조글 >

Win 32 API

Win32 API 의 개념

윈도우 창을 사용하는 방법

내가 원하는 기능의 윈도우 창을 만드는 방법 Window OS에서는 window 라는 프로그램을 사용할 수 있는 방법 을 API 로 제공하고 있다.
Window OS 가 제공하는 win32 API 를 사용하여 윈도우를 사용하는 프로그램을 만들 수 있다.

윈도우 운영체제 이전에는 컴퓨터에 장착되는 키보드, 마우스, 비디오카드, 사운드카드 를 종류별로 모두 직접 프로그래밍 해주었지만,
윈도우 운영체제가 등장하면서, 이와 같은 하드웨어를 동작시키는 프로그램들이 Driver 형태로
운영체제 안으로 들어갔다.
이로서 하드웨어가 무엇이든지, 어떤 회사의 하드웨어 인지에 상관없이 운영체제에서 제공되는 함수만 가지고 출력을 해도,
프린트가 어떤 종류인지 상관없이 모두 출력된다.
윈도우 운영체제의 등장으로 안정적으로 프로그래밍할 수 있도록 변화했다.

윈도우 운영체제 이전에는 메모리 상주 프로그램을 작성하여, 인터럽트 라는것을 감시해서 값을 받아와 처리를 했지만
윈도우 운영체제 에서는 이를 OS메시지 (양의 정수) 의 형태로 해당하는 응용프로그램전달을 해준다.

이렇게 운영체제가 하는 역할과 프로그래머가 하는 역할이 나누어 지게 된다

프로그래머는 운영체제로부터 모든 정보 (MSG message) 를 얻는다.

윈도우의 구성

윈도우는 크게 3가지 동적 라이브러리로 구성되어 있다.
API 함수들의 대부분은 이 세가지 DLL 에 의해 제공된다.

  • KERNEL

    • 메모리를 관리하고 프로그램 실행을 담당
  • USER

    • 유저 인터페이스와 윈도우를 관리 담당한다
  • GDI ( Graphic Device Interface )

    • 각각의 비디오 카드에서 만들어진 그래픽 드라이버 를 다루고,
      그래픽 드라이버를 이용하여 화면에 출력 한다.
    • 화면 처리와 그래픽을 담당한다
    • Gdi.h 로 존재한다
    • MSDN GDI
    • 출력을 하려면 우리는 GDI 모듈을 이용해야 한다.
    • DC
      • DC ( Device Context )
      • 출력하기 위한 장치(화면, 프린터) 의 속성(특성) 을 저장하며,
        출력에 필요한 모든 정보를 가진 데이터 구조체
      • GDI 모듈에 의해서 관리된다
      • App
        DC ( 모니터, 프린터 )
        정보
        GDI ( 장치에 출력 )
    • windows User GDI
      Grapic Driver
      Grapic Driver
      Grapic Driver

프로그래밍 형식의 변화

cpp 는 실행하게 되면 main 함수를 가장 먼저 찾게 되고, Win32 에서는 main 함수가 2가지 함수를 호출하도록 변화하였다.

메시지 처리함수를 OS 에게 등록을 시킨다. 응용프로그램에 해당되는 메시지가 발생이 되었을때는 OS 가 가장 먼저 안다. 모든 하드웨어에 대한 부분들을 OS 가 총괄하기 때문에 그에 대한 모든 정보( 메세지 ) 가 특정 응용프로그램에 해당이 된다면, 맞는 응용프로그램에 보내주게 되는데, 해당되는 메시지와 여러가지 정보를 WinProc 함수에 보내주게된다. 결국 OS 가 WinProc 를 호출하는것이라는 이야기가 된다. WinProc 함수는 콜백함수이다. 그래서 OS 가 일정형식으로 메시지와 정보를 담아 함수를 호출하게 되고, 호출되면 메시지를 받아서 처리해야 하는 특성상, 구조가 딱 정해져 있다. 변화시킬 수 없다.

자유도를 해치게 되었지만, 안정적이고, 코드량을 줄이게 되는 결과를 가져왔다.

C & Win32 [ 키 입력을 받는 프로그래밍 ]

프로그래머가 OS 의 자원을 계속 주도적으로 체크를 해서
적절하게 반응하도록 한 형태

C 에서는 키보드 입력이 들어왔는지 계속해서 반복문을 돌며 체크 합니다. 키보드 입력이 들어왔으면 키보드 버퍼로부터 값을 가져오기 까지 했다. 이제 Win32 에서는 이와 같은 역할은 OS 의 역할이며 키보드 입력이 일어나면 메시지가 발생되며, 프로그래머는 메시지를 받아서 처리만 해주면 된다.

Instance 와 Handle

운영체제는 멀티태스킹 (multi tasking) 운영체제이다. 메모장 프로그램을 동시에 여러개 켜놓았다면, 같은 프로그램의 데이터를 운영체제에서 구별하는 방법은 무엇일까? Instance 와 HANDLE 에 있다.

Instance 와 Handle 의 실체는 무엇인가 ? HINSTANCE, HWND -> HANDLE -> PVOID -> void * : 4 byte 의 양의 정수값 ( 주소를 저장하기 때문에 정수다 ) 공통적으로

Instance 란 무엇인가?

응용프로그램의 아이디 이다. os 가 할당해주는 값, 아이디 이다. 전체 프로그램중에서 중복되지 않는다. 같은 종류의 프로그램은 같은 인스턴스를 가진다. ( 메모장 프로그램 10 개를 띄워도 다 같은 인스턴스 값을 가진다. )

HANDLE 이란 무엇인가?

운영체제에서 할당한 자원의 아이디 값이다. ( 윈도우, 펜, 브러쉬 등 )

  • Kernel 오브젝트의 Id 값 -> Kernel Object