'language/API'에 해당되는 글 8건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

핸들(Handle)에 대한 이해


Handle이란 구체적인 어떤 대상에 붙여진 번호. 문법적으로는 32비트(혹은 64비트)의 정수값이다.


도스에서는 저수준 파일 입출력 시에서만 핸들을 사용하였으나, 

윈도우즈에서는 다양한 종류의 핸들을 사용한다.


윈도우즈에서 다양한 종류의 핸들을 사용하는 이유는 대상끼리의 구분을 위해서는 

문자열보다 정수를 사용하는 것이 속도가 훨씬 더 빠르고 간편하기 때문이다.


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

핸들의 특징


1. 정수값(비교나 대입 연산이 가장 빠른 타입인)이며 대부분의 경우 32비트값이다. 

2. 핸들은 운영체제가 발급하며 사용자는 쓰기만 한다.

3. 같은 종류의 핸들끼리는 절대로 중복된 값을 가지지 않는다.

4. 핸들의 실제값이 무엇인지는 알 필요가 없다.


핸들은 예외없이 접두어 H로 시작하며 핸들값을 저장하기 위해 별도의 데이터형까지 정의되어있다.

HWND, HPEN, HBRUSH, HDC 등이 핸들을 담기 위한 데이터형들이고 모두 부호 없는 정수형이다.




'language > API' 카테고리의 다른 글

유니코드(Unicode)  (0) 2016.04.26
비트 OR 연산자  (0) 2016.04.26
변수명명법  (0) 2016.04.26
WM_SIZE  (0) 2016.04.24
API 프로그래밍의 시작  (0) 2016.04.24
블로그 이미지

saylin

,

변수명명법

language/API 2016. 4. 26. 21:12
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

변수명명법


자주 사용하는 변수 형식에 대해서 관습적으로 정해진 접두어를 많이 사용한다.

이런 변수 명명법을 헝가리식 명명법(Hungarian Naming)이라고 한다.


cb(Count of Bytes): 바이트 수

dw(double word): 부호 없는 long형 정수(unsigned)


h(handle): 윈도우, 비트맵, 파일 등의 핸들

sz(Null Terminated): NULL 종료 문자열


ch(Character): 문자형

a(Array): 배열

w(Word): 부호없는 정수형


i(Integer): 정수형

p, lp(long pointer): 포인터형

b(Bool): 논리형


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

사용자 정의 데이터형


windows.h 헤더 파일에 typedef로 선언되어 있고, 표준 데이터형처럼 사용한다.

C 타입의 데이터형을 사용하지 않고 이와 같은 중간 타입을 사용하는 이유는 이식성을 고려해서다.


BYTE: unsigned char

CHAR: char


WORD: unsigned short

DWORD: unsigned long

LONG: long과 동일


BOOL: 정수형, true, false 중 하나의 값을 가진다.




'language > API' 카테고리의 다른 글

유니코드(Unicode)  (0) 2016.04.26
비트 OR 연산자  (0) 2016.04.26
핸들(Handle)에 대한 이해  (0) 2016.04.26
WM_SIZE  (0) 2016.04.24
API 프로그래밍의 시작  (0) 2016.04.24
블로그 이미지

saylin

,

WM_SIZE

language/API 2016. 4. 24. 16:35
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

static RECT rt;

switch(iMessage) {

case WM_DESTROY:

PostQuitMessage(0);

return 0;


case WM_SIZE:

GetClientRect(hWnd, &rt);

InvalidateRect(hWnd, NULL, true);

return 0;


case WM_PAINT:

hdc=BeginPaint(hWnd, &ps);

SetTextAlign(hdc, TA_CENTER);

TextOut(hdc, rt.right/2, rt.bottom/2, TEXT("Center String"), 13);

EndPaint(hWnd, &ps);

return 0;


}

return(DefWindowProc(hWnd, iMessage, wParam, lParam));

}




'language > API' 카테고리의 다른 글

유니코드(Unicode)  (0) 2016.04.26
비트 OR 연산자  (0) 2016.04.26
핸들(Handle)에 대한 이해  (0) 2016.04.26
변수명명법  (0) 2016.04.26
API 프로그래밍의 시작  (0) 2016.04.24
블로그 이미지

saylin

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

API에 대해 공부하면서 배운 내용들을 간단하게 정리하고자 블로그를 개설하게 되었다.

개인적인 복습을 위해서 배웠던 내용들을 바로 정리하지는 않고 선등록 후 편집하는 과정을 거칠 것 같다.


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

도스(DOS), 즉 Console 환경에서의 C 코드 중에서

아무 것도 출력하지 않고 프로그램을 종료하는 C 코드는 다음과 같다.


// Console

#include <stdio.h>


int main(void)

{

return 0;

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

윈도우즈(Windows), GUI(Graphic User Interface) 환경에서도 위와 동일하게 

창 안에 아무 것도 없고 종료하는 기능만을 가지는 벙어리 윈도우를 생성하는 코드를 작성할 수 있다.

다만 Console 환경과 비교했을 때, 코드의 길이와 양 자체는 비교할 수 없을 정도로 길고 많다.


// Windows

#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;

MSG Message;

WNDCLASS WndClass;

g_hInst = hInstance;


WndClass.cbClsExtra=0;

WndClass.cbWndExtra=0;

WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // WHITE_BRUSH BLACK_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, SW_RESTORE); // 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;

case WM_LBUTTONDOWN:

MessageBeep(0);

return 0;

}

return(DefWindowProc(hWnd, iMessage, wParam, lParam));

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

윈도우즈의 특징 및 장점


1. 그래픽 기반(GUI)의 운영체제

2. 멀티 태스킹

3. 메세지 구동 시스템

4. 장치독립성(Device Driver의 제공)

5. 일관성

6. 리소스와 코드의 분리


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

API(Application Programming Interface)

운영체제가 응용프로그램을 위해 제공하는 함수의 집합







'language > API' 카테고리의 다른 글

유니코드(Unicode)  (0) 2016.04.26
비트 OR 연산자  (0) 2016.04.26
핸들(Handle)에 대한 이해  (0) 2016.04.26
변수명명법  (0) 2016.04.26
WM_SIZE  (0) 2016.04.24
블로그 이미지

saylin

,