ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • API 기초
    C/C++ 2015. 3. 12. 21:54

    API는 Application Programming Interface의 약자로, C/C++의 함수모음집이라고 생각하면된다.


    다양한 C의 함수로 GUI개발이 가능하다.


    API 소스를보고 하나하나 분석해보자.


    #include <Windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    HINSTANCE g_hInst;
    LPCTSTR IpszClass = TEXT("First");
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int nCmdShow)
    {
    	HWND hWnd;
    	WNDCLASS WndClass;
    	MSG Message;
    	g_hInst = hInstance;
    	WndClass.cbClsExtra = 0;
    	WndClass.cbWndExtra = 0;
    	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	WndClass.hInstance = hInstance;
    	WndClass.lpfnWndProc = WndProc;
    	WndClass.lpszClassName = IpszClass;
    	WndClass.lpszMenuName = NULL;
    	WndClass.style = CS_HREDRAW | CS_VREDRAW;
    	RegisterClass(&WndClass);
    
    	hWnd = CreateWindow(IpszClass, IpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);
    	ShowWindow(hWnd, nCmdShow);
    
    	while (GetMessage(&Message, NULL, 0, 0)) {
    		TranslateMessage(&Message);
    		DispatchMessage(&Message);
    	}
    	return (int)Message.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
    {
    	switch (iMessage) {
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	}
    	return (DefWindowProc(hWnd, iMessage, wParam, lParam));
    }



    windows.h


    - windows 헤더에는 API에서 사용되는 상수,함수들이 정의되어있어 저 헤더파일하나만있어도 처음에는 전부다 가능하다.


    WinMain()


    - C언어에서 메인함수는 인수를 여러가지로 사용할수있지만 API에서는 고정이다.

    저 인자값이 꼭 필요하다. APIENTRY는 윈도우즈 표준 호출규약인 __stdcall을 사용한다.


    [인수설명]

    hInstance : 프로그램의 인스턴스 핸들

    hPreInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스핸들

    lpszCmdParam : 명령행으로 입력된 프로그램 인수

    nCmdShow : 프로그램이 실행될 형태, 최소화 등이 전달


    *인스턴스란?


    - 실행중인 프로그램 하나자체를 통틀어서 쓰는 용어이다.

    윈도우즈는 멀티태스킹이 가능하다. 이때 실행되고있는 프로그램 하나하나 인스턴스라고한다.



    [WndProc]


    WinMain은 프로그램 시작점이며, 또다른 함수는 WndProc이다.


    WndProc은 사용자와 시스템이 보내오는 메세지들을 처리하는 함수이다.

    콘솔에서는 main함수만 있으면 해결되지만 API에서는 WinMain과 WndProc함수 두개다 존재해야한다.


    WinMain은 프로그램 형태를 제공해주고 나머지 요청들은 WndProc에서 도맡는다.

    WndProc함수역시 __stdcall 호출규약을 사용한다.


    'C/C++' 카테고리의 다른 글

    [API]WM_PAINT  (0) 2015.03.12
    [API]TextOut  (0) 2015.03.12
    [API]WndProc  (0) 2015.03.12
    [API]Message Loop  (0) 2015.03.12
    API 기초(2)  (0) 2015.03.12

    댓글

Designed by Tistory.