본문 바로가기

무작정 따라해보기(정리, 문제풀기)/Win32API

5. Win32 API 프로그래밍

728x90

 

'나우캠퍼스X아워즈팜'유튜브의 'Win32 API 2강. Win32 API 프로그래밍 구조 (2/5)'영상을 보고 정리한 내용입니다.

 

먼저 윈도우 프로그래밍을 위한 프로젝트를 만들겠습니다.

프로젝트 이름을 설정해주고 만들기를 누릅니다.

애플리케이션 종류를 데스크톱 애플리케이션으로 바꿔주고 빈 프로젝트를 체크합니다.

프로젝트를 오른쪽 클릭 합니다.

 

 

 

 

멀티바이트 문자 집합이 c, c++에서 사용하던 아스키코드의 1~2byte까지 전부 포함하는 문자를 지원하기 때문에 멀티바이트 문자 집합으로 바꿔줍니다.(c, c++에서 쓰던 함수를 그대로 사용할 것이고 멀티바이트는 아스키코드+ 한글도 지원하기 때문에)

 

 

멀티 바이트(MBCS)

  • 아스키코드값(1byte), 한글(2byte) 모두 지원
  • 1~2Byte 크기의 문자 집합
  • 영문 한글, 중국어 일본어 등 지원
  • 일반 c함수는 MBCS 문자집합을 사용한다.

 

유니코드

  • 2Byte로 전세계 언어를 표현
  • 멀티 바이트 문자 집합비해 메모리 많이 차지, 처리속도는 빠름
  • 아스키코드 값의 일부는 유니코드와 같다.

 

문자와 문자열

TCHAR

  • ANSI
    • CHAR, char
  • Unicode
    • WCHAR, wchar_t

LPTSTR

  • ANSI
    • LPSTR -> char *
  • Unicode
    • LPWSTR, wchar_t *

*모르는 데이터형이 나오면 찾아보기!

 

멀티바이트 -> 유니코드로 바꿔야할 때가 있다

  • LPTSTR str = TEXT("문자열"); <- 멀티바이트를 유니코드로 바꿈

 

WinMain

  • int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  • #define WINAPI __stdcall
    매개변수를 스택에 넣는 방법
  • hInstance 인스턴스
    실행되고 있는 프로그램들을 구별하기 위해 사용된다고 하였다. 이것은 os가 할당하는 것이며 같은 프로그램이라면 동일한 값을 가지고 있다. 각각에 대한 값은 핸들로 구분한다.
  • hPrevInstance
    이전 인스턴스에 대한 값을 받는 부분, 지금 사용 x 항상 o
  • lpCmdLine
    실행파일 옆에 값을 주어서 외부에서, 실행하고자 하는 파일과 함께 외부에서 그 프로그램 안으로 값을 넣고자 할 때 사용하는. 프로그램 외부에서 내부로 값 설정
  • nCmdShow
    윈도우 출력 형태에 관한 값(윈도우가 화면에 보여주도록 하게 하는 그런 값)
  • int APIENTRY _tWinMain
    위와 같은 WinMain도 만날 수 있다. 유니코드를 사용한다면 저런 형태로 쓴다.
  • 가장 잘 기억해야 할 것은 WinMain은 윈도우 프로그램의 진입점이고 윈도우의 구조체에 대한 등록과 생성, 메시지 루프가 있다는 것을 꼭 기억하기
  • 코딩 해보기(WinMain함수의 원형)
    #include <windows.h>
    int WINAPI WinMain(HINSTANCE hInstance,

    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    return 0;
    }
  • hInstance, nCmdShow가 주로 사용됨

WndProc

  • LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  • #define CALLBACK __stdcall
  • typedef unsigned int UINT;
  • typedef long LONG_PTR;
  • typedef unsigned int UINT_PTR;
  • typedef UINT_PTR WPARAM;
  • typedef LONG_PTR LPARAM;
  • typedef LONG_PTR LRESULT;
  • 코딩해보기(함수의 원형)
    LRESULT CALLBACK WndProc(HWND hWnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam)
    {
    return 0;
    }

 

혹시 제가 잘못 이해한 부분이(잘못된 정보) 있다면 알려주시면 감사하겠습니다. :)