'API/이론'에 해당되는 글 24건
- 2016.04.11 윈도우 창 만들기.
- 2016.04.11 핸들(handle)
- 2016.04.11 변수 명명법
- 2016.04.11 API란?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 |
#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR strCmdLine, int mShowCmd)
{
WNDCLASSEX wcex; // 윈도우의 특성을 정의하는 구조체
memset(&wcex, 0, sizeof(wcex));
wcex.cbSize = sizeof(wcex);
wcex.style = CS_PARENTDC; // 윈도우 스타일을 지정한다.
wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // 윈도우 배경색 지정.
wcex.hCursor = LoadCursor(NULL, IDC_CROSS); // 커서 지정.
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 아이콘 지정.
wcex.hInstance = hInstance; // 프로그램의 번호
wcex.cbClsExtra = 0; // 특수목적에 사용
wcex.cbWndExtra = 0; // 특수목적에 사용
wcex.hIconSm = NULL; // 작은 아이콘
wcex.lpszMenuName = NULL; // 메뉴지정
wcex.lpfnWndProc = WndProc; // 메세지 처리 함수
wcex.lpszClassName = L"MyWindow"; // 타이틀바 이름.
RegisterClassEx(&wcex); // 윈도우 클래스를 등록한다.
HWND hWnd = CreateWindow(L"MyWindow", L"닝겐 윈도우",
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, // 윈도우 형태
200, 0, // 윈도우 x,y좌표
300, 700, // 윈도우 Width, Height
NULL, // 부모 윈도우
NULL, // 윈도우의 Menu ID값
hInstance, // 프로그램의 번호와 윈도우 연결
NULL // 특수 목적
);
if(hWnd == NULL)
{
MessageBox(NULL, L"윈도우 생성 실패",L"에러", MB_ICONERROR | MB_OK );
return -1;
}
ShowWindow(hWnd, SW_SHOW);
MSG msg;
memset(&msg, 0, sizeof(msg));
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY :
{
PostQuitMessage(0);
break;
}
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
} |
cs |
핸들(handle)이란,
구체적인 어떤 대상에 붙여진 번호이며, 문법적으로 32비트(또는 64비트)의 정수값이다.
도스 프로그래밍에서는 거의 유일하게 저수준 파일 입출력시 파일 핸들만이 사용되었으며,
그래서 도스에서 핸들은 곧 파일 핸들을 의미하는 경우가 많았다.
일반적인 핸들의 특징은 다음과 같은 특징이 있다.
①. 핸들은 정수값이며, 대부분 32비트이다.
핸들을 사용하는 목적은 오로지 구분을 위한 것으므로 핸들끼리 중복되지 않아야 한다. 그리고 이런 목적으로는 정수형이 가장 적합하다.
그 이유는 정수형은 비교나 대입 연산이 가장 빠른타입이기 때문이다.
②. 핸들은 운영체제가 발급하며 사용자는 쓰기만 한다.
예를들어 윈도우를 만들거나 파일을 열면 운영체제는 만들어진 윈도우나 열려진 파일에 핸들을 붙이고 그 값을 리턴한다.
사용자는 이 핸들을 잘 보관해 두었다가 해당 윈도우나 파일을 다시 참조할 때 사용한다. 사용자가 직접 핸들을 만드는 경우는 없다.
③. 같은 종류의 핸들끼리는 절대 중복값을 가지지 않는다.
만약 그렇게 된다면 대상을 구분하는 본래의 목적을 달성할 수 없을 것이다.
다른 종류의 핸들끼리는 중복된 값을 가질 수도 있다.
④. 핸들은 정수형으므로 값을 가지겠지만, 그 실제값이 무엇인지는 몰라도 된다.
핸들은 크고 작음의 성질을 가지는 숫자가 아니라 단순한 표식일 뿐이다.
핸들형 변수를 만들어 핸들을 대입 받아 쓰고 난 후에는 버리면 된다.
마치, malloc한 포인터의 실제 위치가 어디인가 신경쓸 필요없이 사용하다가 free로 해제하면 그만인 것이다.
윈도우즈에서 핸들은 예외없이 접두어 H호 시작되며 핸들값을 저장하기 위해 별도의 데이터형까지 정의해 두고있다.
HWND, HPEN, HBRUSH, HDC등이 핸들을 담기 위한 데이터형들이며 모두 부호없는 정수이다.
윈도우즈에서는 많은 변수가 사용되므로 대체로 변수 이름을 길게 쓰며,
되도록 보기 좋게 하기 위해 대문자와 소문자를 적당히 혼합하여 사용한다.
사용하는 변수가 많으므로, 지나치게 단축형으로 쓰면 혼란스럽고 그렇다고
너무 길게 쓰면 입력하기 불편하므로 적당히 절충하여 변수 이름을 정한다.
특히 자주 사용하는 변수 형식에 대해서는 관습적으로 정해진 접주어를 많이 사용한다.
접두어 |
원래말 |
의미 |
cb |
Count of Bytes |
바이트 수 |
dw |
double word |
부호없는 long형 정수 |
h |
handle |
윈도우, 비트맵, 파일 등의 핸들 |
sz |
Null Terminated |
NULL 종료 문자열 |
ch |
Character |
문자형 |
a |
Array |
배열 |
w |
Word |
부호없는 정수형 |
i |
Integer |
정수형 |
p,lp |
long pointer |
포인터형 |
b |
Bool |
논리형 |
변수명을 나타내는 이런 관습 외에도 윈도우즈에서는 사용자 정의 데이터형들이 많이 있다.
이 데이터형은 windows.h라는 헤더 파일에 typedef로 선언되어 있으며, 마치 표준 데이터형처럼 사용하므로 알아두면 유용하다.
데이터형 |
의미 |
BYTE |
unsigned char형 |
CHAR |
char형 |
WORD |
unsigned shot형 |
DWORD |
unsigned long형 |
LONG |
long과 동일하다. |
BOOL |
정수형이며 TRUE, FALSE 중 한 값을 가진다. |
'API > 이론' 카테고리의 다른 글
Main함수 비교 (0) | 2016.04.12 |
---|---|
헤더파일 (0) | 2016.04.12 |
윈도우 창 만들기. (0) | 2016.04.11 |
핸들(handle) (0) | 2016.04.11 |
API란? (0) | 2016.04.11 |
우선, API의 정의를 내려보도록 하자.
API란,
Application
Programming
Interface
의 약자이다.
이것을 우리말로 풀어 쓰자면,
"운영체제가 응용 프로그램을 위해 제공하는 함수의 집합" 이다.
하드웨어----------운영체제----------응용프로그램
운영체제는 하드웨어와 응용 프로그램 사이에 위치하며,
응용 프로그램을 대신하여, 하드웨어와 메모리를 관리하는 시스템 소프트웨어이다.
'API > 이론' 카테고리의 다른 글
Main함수 비교 (0) | 2016.04.12 |
---|---|
헤더파일 (0) | 2016.04.12 |
윈도우 창 만들기. (0) | 2016.04.11 |
핸들(handle) (0) | 2016.04.11 |
변수 명명법 (0) | 2016.04.11 |