키보드로부터 문자를 입력 받고자 할 경우는 WM_CHAR 메세지를 사용하면 된다. 그러나 WM_CHAR 메시지는 문자만을 입력받는 메시지 이므로 문자 이외의 키는 입력받을 수 없다. 예를 들어 커서 이동키라던가 Del 같은 키는 문자키가 아니기 때문에 이런 키는 WM_CHAR 메세지가 입력되지 않는다.

 이 때는 WM_KEYDOWN 메시지를 사용해야한다. WM_KEYDOWN 메시지는 키보드를 누를 때마다 윈도우로 전달되는데 문자가 아닌 모든 키에 대해서 발생한다.

 이 때 wParam 으로는 문자 코드가 아닌 가상 키코드라는 것이 전달된다. 가상 키코드란 시스템에 장착된 키보드의 종류에 상관없이 키를 입력받기 위해 만들어진 범용적인 코드값이며 다음과 같이 정의되어 있다.

VK_LBUTTON        01
VK_RBUTTON        02
VK_CANCEL          03
VK_MBUTTON       04
VK_BACK              08          백스페이스
VK_TAB                09          탭
VK_CLEAR            0C        
VK_RETURN          0D         엔터
VK_SHIFT             10          쉬프트
VK_CONTROL       11          컨트롤
VK_MENU             12          알트
VK_PAUSE            13          Pause
VK_CAPITAL         14          Caps Lock
VK_ESCAPE         1B          ESC
VK_SPACE           20          스페이스
VK_PRIOR             21          pgUp
VK_NEXT              22          pgDn
VK_END                23          End
VK_HOME             24          Home
VK_LEFT              25          좌측 방향키
VK_UP                 26          위쪽 방향키
VK_RIGHT            27          오른쪽 방향키
VK_DOWN            28          아래쪽 방향키
VK_SELECT         29           
VK_PRINT            2A
VK_EXECUTE       2B
VK_SNAPSHOT     2C          Print Screen
VK_INSERT          2D           Insert
VK_DELETE         2E           Delete
VK_HELP             2F
                          30~39      숫자키 0~9
                          41~5A      알파벳 A~Z  
VK_LWIN             5B           왼쪽 윈도우 키
VK_RWIN             5C           오른쪽 윈도우 키
 
등등이 있다.
Posted by 바람처럼..
|


메세지 박스 만들기.

윈도우 프로그램에서 간단한 메세지 박스를 띄우는 것은 참 쉽다..

함수 하나만 호출하면 되는데 함수 원형은..

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) ;

첫 파라미터 hWnd는 현재 윈도우의 핸들을 넣으면 되고,

lpText에는 메세지 박스에 출력할 문자열,

lpCaption 에는 메세지 박스 타이틀 바에 제목 문자열,

그리고 마지막 파라미터는 메세지 박스에 어떤 종류의 버튼이 나타날 것인가를 지정하는 플래그가 들어간다.

그 각 플래그 값들은..

MB_ABORTRETRYIGNORE : Abort, Retry, Ignore 세 개의 버튼이 나타난다.

MB_OK : OK 버튼 하나만 나타난다.

MB_OKCANCEL : OK버튼 과 CANCEL 버튼이 나타난다.

MB_RETRYCANCEL : Retry, Cancle 두 개의 버튼이 나타난다.

MB_YESNO : Yes, NO 두 개의 버튼이 나타난다.

MB_YESNOCANCEL : YES, NO, CANCEL 세 개의 버튼이 나타난다.

또 각 메세지 박스의 버튼이 클릭 되면 클릭된 상태에 따라 여러가지 리턴 값이 날라오는데,

그 값을 확인하고 처리를 해 주면 된다..

IDABORT : Abort 버튼을 눌렀을 때.

IDCANCEL : Cancel 버튼을 눌렀을 때.

IDIGNORE : Ignore 버튼을 눌렀을 때.

IDNO : No 버튼을 눌렀다.

IDOK : OK 버튼을 눌렀다.

IDRETRY : Retry 버튼을 눌렀다.

IDYES : Yes 버튼을 눌렀다.

Posted by 바람처럼..
|

앞선 문자와 마찬가지로 여러 가지 출력들에 대하여 알아보자...

먼저 픽셀 출력 법이다..

함수의 원형은

COLORREF SetPixel( hdc, nXPos, nYPos, clrref )

이다.

일단 지금부터 보는 출력용 함수들의 첫번째 인자는 모두 hdc를 필요로 한다.

hdc를 얻는 방법은 바로 앞 포스트를 참조한다.

위의 SetPixel 함수는 x,y 좌표에 마지막 인수로 받은 색정보를 가지고 픽셀을 찍는다..

보통 찍을 때 마다 색 정보가 다르므로 이런 방식을 쓰지만 윈도우 프로그래밍에서는 잘 쓰지 않는다.

선을 긋고 싶으면,

DWORD MoveToEx(hdc, x, y, lpPoint )
BOOL LineTo(hdc, xEnd, yEnd )

를 사용한다.

이 2가지 함수는 먼저 선의 시작점으로 MoveToEx 함수를 이용하여 점을 이동 시킨 후

끝점의 좌표를 LineTo 함수의 x, y 에 넣어주면된다.

즉, MoveToEx(hdc, 100, 100, NULL) ;
LineTo(hdc, 150, 100 ) ;

이런 함수를 만든다면, 이것은 100, 100 에서 150, 100 을 잇는 선을 긋는다.

사각형과 원을 그리는 것은 함수의 형태는 동일하다..
함수의 원형은

BOOL Rectangle(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect )
BOOL Ellipse(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect )

이런 형태이다.

2가지 모두 4점의 좌표를 입력 받는데 사각형은 그 첫번째 x, y (Left, Top) 값과 두번째 x1, y1 ( Right, Bottom) 값을

가지고 사각형을 그리며, 원은 그 사각형에 내접하는 타원을 그린다.
Posted by 바람처럼..
|


DC를 이용해서 문자열 출력을 알아보자...

먼저 문자열을 출력 하기 위해서는

HDC hdc ;
hdc =  GetDC(hWnd) ; //  여기서 hWnd는 처음 윈도우를 만들면서 받아놓은 현재윈도우의 핸들이다.

TextOut(hdc, 100, 100, TEXT("Test"), 4) ;
// TextOut함수는 먼저 hdc를 적고, x, y 좌표, 텍스트 내용, 그리고 텍스트의 길이 순으로 입력한다.

ReleaseCD(hWnd, hdc) ;
//그리고 다 했으면 해제를 해준다...

이것은.. 가장 간단한 문자열 출력 방법이다...

하지만 이 코드로 글자를 찍으면, 윈도우가 다른 윈도우에 가려졌거나, 윈도우의 크기 변경 등이 있다면,

바로 다시 사라져 버린다...

그걸 방지하기 위해서는 항상 새로 그려 줘야 하므로, 루프 내부에 코드를 삽입하거나, WM_PAINT 메세지

안에 코드를 삽입하면 항상 글자가 출력되도록 할 수 있다.
(문자열 출력 방법)

Posted by 바람처럼..
|


스샷을 저장할 일이 생겨서, 스샷을 저장하려다 보니.. 각 찍힌 시간을 파일 명으로 만들고 싶어졌다....

생각보다 api 함수를 이용하면 시간을 얻기는 간단하다.

일단..

<time.h> 를 선언한다. 아래의 함수들은 각 시간을 얻는 함수들 이다.

_strtime : 현재 시간을 문자열로 만들어주는 함수이다. 함수원형은..

char* _strtime( char *time );

이다.

char time[9];

_strtime( time );
// 11:23:24 (시:분:초)형식이며, 24시간으로 표시된다.

_strdate : 오늘 날짜를 문자열로 만들어 주는 함수이다. 함수 원형은..

char* _strdate( char *date );

이다..

char data [9];

_strdate( data );
// 08/05/11 (월/일/년)형식으로 표시된다.

strftime : 이 함수는 사용자가 지정한 형식대로 현재시간을 문자열로 출력하는 함수이다. 함수 원형은..

size_t strftime( char *strDest, size_t maxsize, const char *format, const struct tm *timeptr );

이다..

time_t cur;
struct tm* ptm;
char buf[100] = {0};

cur = time(NULL);
ptm = localtime(&cur);

strftime(buf, sizeof(buf), "%c", ptm);
//08/05/11 11:30:05
strftime(buf, sizeof(buf), "%m/%d/%y %H:%M:%S", ptm);
//08/05/11 11:30:05
strftime(buf, sizeof(buf), "%Y년 %#m월 %#d일 %#I시 %#M분 %#S초", ptm);
//2011년 08월 05일 11시 30분 5초
strftime(buf, sizeof(buf), "%I:%M %p", ptm);
//11:30 AM

// 위 함수를 사용하기 위해서는 localtime(...); 함수로 시간을 우선 얻어와야 한다.

Posted by 바람처럼..
|

윈도우 화면에 무엇인가를 출력하려면, 항상 꼭 필요한 것이 이 DC이다.

보통 처음 프로그래밍을 배울 때는 항상 그냥 DC가 필요하니 GetDC를 해서 쓰고, 릴리즈 하고.. 머 이런식으로 DC 자체에 대

해서는 쉽게 그냥 지나치기 쉽다.

하지만 무언가를 사용하기 위해서는, 그 것의 원리를 이해해야 머리속에 오래 남아있는 법이니.. DC에 대해서 알아보자..

 일단 윈도우는 크게 세 가지 동적 라이브러리로 구성되어 있는데, 메모리를 관리하고 프로그램을 실행시키는 KERNEL, 유저

인터페이스와 윈도우를 관리하는 USER, 화면 처리와 그래픽을 담당하는 GDI가 있다... API 함수들의 대부분은 이 세 가지

DLL에 의해 제공 된다.
 
 이 중에 출력을 하려면 우리는 GDI(Graphic Device Interface ) 모듈을 이용해야 한다.

 DC(Device Context ) 란 출력에 필요한 모든 정보를 가지는 데이터 구조체이며, GDI 모듈에 의해 관리된다.

그렇다면 DC는 왜 필요한 것일까??

상황을 가지고 생각하면, 쉽게 정리가 된다.... 선을 하나 그릴려고 하면.. 점 2개가 있으면 선을 그을 수 있다... 하지만... 잘 생

각해보면, 좌표값 2개도 중요하지만, 선의 색, 굵기,모양, 혹은 점선이라던지 여러가지 방법 등등, 속성 값을 넣자면, 하나둘이

아니다.. 이럴 때 DC를 이용하면, 기본적으로 DC에 default값이 저장되어 있기 떄문에, DC와 좌표 2개면 충분해진다. 혹시 바

꾸고 싶은 속성이 있다면 얻어온 DC에서 바꾸고 싶은 부분만 바꾸면 충분하다.

또 DC에는 현재 윈도우의 값도 가지고 있다... 이것이 제일 중요한 부분인데.. 아까 라인을 예로 들었는데, 좌표 2개를 줬다고

치면, 0,50 에서 100, 150 까지 가는 선을 그리고 싶었는데 그것이 화면 좌표를 기준으로 0,50 부터 100, 150인지 현재 윈도우의

클라이언트 영역의 0,0을 기준으로 하는지를 모르면, 잘못된 값이 나올 수 있다. 하지만 DC는 현재 윈도우의 DC를 보통 Get

해오기 때문에 자동으로 현재 윈도우를 기준으로 좌표를 설정하여 그려준다.

 또 클리핑 영역(윈도우가 2개이상 겹쳤을 때 상위에 가려진 하위 부분은 그릴 필요가 없다. 그 영역을 말함 ) 을 자동으로 계산

해 주어, 뒷 영역의 윈도우의 그림이 앞 윈도우를 침범하지 못하도록 해 준다....

 흔히 에이 윈도우는 당연히 뒤에 그림이 가려지지 라고 생각한다면... 그것은 다 윈도우를 프로그램한 프로그래머가 그렇게 만

들어 두었기 때문이지.. 원래 그렇지는 않다. 화면에 찍히는 랜더링 장면들은 순서에 영향을 받기 때문에 이런 처리가 없다면,

당황스러운 결과가 나올 수 도 있다..

어쨌든 정리해보면,, DC는 위와 같은 역할들을 하고 또 위와 같은 정보들을 가지기 때문에, 선을 그린다던지 도형을 그린다던

지 하는 함수의 제일 첫 인자는 항상 DC를 받아와서 쓴다....

'프로그래밍 > API' 카테고리의 다른 글

[API] DC 를 이용한 문자열 출력  (0) 2011.08.07
[API] 다양한 현재시간과 현재날짜 얻기  (1) 2011.08.05
[API] 커서 바꾸기..  (0) 2011.08.03
[API] 메시지 루프  (0) 2011.08.02
[API] 윈도우 생성..  (0) 2011.08.02
Posted by 바람처럼..
|


커서 모양을 바꾸려면 윈도우 클래스를 작성할 때 원하는 커서 정보를 넘기면 된다.

WndClass.hCursor = LoadCursor(NULL, IDC_ARROW) ;

보통은 이런 식으로 정하는데, 뒷 부분의 LoadCursor 함수가 바로 커서를 읽어 오는 함수이다.

함수 원형은

HCURSOR LoadCursor( HINSTANCE hInstance, LPCTSTR lpCursorName) ;

이다.

첫 번째 인수 hInstance는 커서를 가지고 있는 프로그램의 인스턴스 핸들이지만 기본 제공하는 표준 커서를 사용하려면 NULL

로 지정한다.

윈도우즈의 디폴트 커서는 다음과 같다...

IDC_ARROW : 흔히 보는 화살표 모양이다.

IDC_CROSS : 십자 모양의 커서이다.

IDC_IBEAM : editbox 같은 문자위에 마우스가 올라갔을 떄 나오는 1자형 커서이다.

IDC_NO : 원안에 빗금이 쳐져잇는 모양의 커서이다.

IDC_Wait : 모래시계 모양의 커서이다.

'프로그래밍 > API' 카테고리의 다른 글

[API] 다양한 현재시간과 현재날짜 얻기  (1) 2011.08.05
[API] DC ( Device Context ) 란..........  (0) 2011.08.03
[API] 메시지 루프  (0) 2011.08.02
[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
Posted by 바람처럼..
|


윈도우즈를 메시지 구동 시스템(Message Driven System)이라고 하는데 윈도우즈는 미리 입력된 일련의 명령들을 순서대로

실행하는 것이 아니라 프로그램의 실행 순서가 명확하게 정해져 있지 않으며 상황에 따라 실행 순서가 달라지는데 여기서 말하

는 상황이란 바로 어떤 메시지가 발생했는가를 의미한다.
 
메시지란 사용자나 시스템의 내부적인 동작에 의해 발생된 정보이다. 예를 들면, 마우스 버튼을 클릭했다거나 키보드를 눌렀다

거나 윈도우가 최소화되었다거나 하는 변화에 대한 정보들이 메시지이다.

 윈도우 프로그램에서 메시지를 처리하는 부분을 메시지 루프(Message Loop)라고 하며 보통 WinMain 함수의 끝에 다음과

같은 형식으로 존재한다.

while (GetMessage(&Message,NULL,0,0)) {
       TranslateMessage(&Message) ;
       DispatchMessage(&Message) ;
}


위와 같이 메시지 루프는 세 개의 함수 호출로 이루어져 있으며, 전체 루프는 while문으로 싸여져 있어 무한 반복된다.

그럼 각 함수의 역할을 알아보자...

BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);

 이 함수는 메시지 큐에서 메시지를 읽어들인다. 메시지 큐는 시스템이나 사용자로 부터 발생된 메시지가 잠시 대기하는 저장

공간으로 이 함수는 읽어들인 메시지가 프로그램을 종료하라는 WM_QUIT일 경우 FALSE를 리턴하며 그 외의 메시지이면

TRUE를 리턴한다.

BOOL TranslateMessage(CONST MSG *lpMsg);

 이 함수는 키보드 입력 메시지를 가공하여 프로그램에서 쉽게쓸 수 있도록 한다. 어떤 키가 눌러지거나 떨어졌을 때 키보드 메

시지를 발생시키는데 TranslateMessage 함수는 WM_KEYDOWN 메시지가 발생할 때 마다 문자가 입력되었다는 메시지

(WM_CHAR)를 만드는 역할을 한다.

LONG DisPatchMessage(CONST MSG *lpmsg);

이 함수는 메시지 큐에서 꺼낸 메시지를 윈도우의 메시지 처리 함수(WndProc) 로 전달한다.


메시지 루프의 세 함수는 공통적으로 MSG 라는 구조체를 사용하는데 이 구조체는 다음과 같이 정의되어 있다.

typedef struct tagMSG
{
       HWND         hwnd;
       UINT          message;
       WPARAM    wParam;
       LPARAM     lParam;
       DWORD       time;
       POINT         pt;
} MSG ;

각 멤버의 의미는...

hwnd : 메시지를 받을 윈도우 핸들이다.
message : 어떤 종류의 메시지인가를 나타낸다. 가장 중요한 값이다.
wParam : 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지별로 다르다. 32bit 값.
lParam : 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지별로 다르다. 32bit 값.
time : 메시지가 발생한 시간이다.
pt : 메시지가 발생했을 때의 마우스 위치이다.

'프로그래밍 > API' 카테고리의 다른 글

[API] DC ( Device Context ) 란..........  (0) 2011.08.03
[API] 커서 바꾸기..  (0) 2011.08.03
[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 유니코드  (0) 2011.07.31
Posted by 바람처럼..
|
흠.. 역시나 윈도우 프로그램에서 가장 중요한 것은 윈도우다.. 즉, 멀 띄우든지 그 기본이 되는 배경이 있어야 할 것이 아닌가..
윈도우 프로그래밍에서 예전 글에 있는 윈도우 클래스를 참조하여 CreateWindow 함수를 이용 윈도우를 만든다.

HWND CreateWindow(lpszClassName, lpszWindowName, dwStyle, x, y, nWidth, nHeight, hwndParent, hmenu, hinst, lpvParam)

이 것이 Create Window의 함수 원형이다.

lpszClassName : 생성하고자 하는 윈도우의 클래스를 지정하는 문자열이다. CreateWindow 함수는 윈도우 클래스에 정의된 속성되로 윈도우를 생성하는데, 앞서 등록한 WNDCLASS 구조체의 lpszClassName 멤버의 이름을 여기 넣는다.

lpszWindowName : 윈도우 타이틀 바에 나타날 문자열이다.

dwStyle : 만들고자 하는 윈도우의 형태를 지정하는 인수이다. 일종의 비트 필드값이며 수십개의 매크로 상수들이 정의되어 있으니 필요한 형태로 쓰면 된다.

x,y  : 윈도우의 시작 위치를 의미한다.

nWidth,nHeight : 윈도우의 크기를 의미한다. 즉 640x480 이면 x,y 위치에 640x480 크기의 윈도우가 생긴다.

hwndParent : 부모 윈도우가 있을 경우 부모 윈도우의 핸들을 지정한다.

hmenu : 사용할 메뉴의 핸들을 지정한다.

hinst : 프로그램의 핸들을 지정한다. WinMain의 인수로 전달된 hInstance를 대입하면 된다.

lpvParam : 보통은 NULL 값을 넣으므로 일단 무시.

이렇게 윈도우를 만들었으면 화면에 보여야 할 것이다. 화면에 표시하는 함수가..

BOOL ShowWindow(hWnd, nCmdShow )

이다.

hWnd는 화면에 출력하고자하는 윈도우의 핸들이며 createWindow 함수가 리턴한 핸들을 그대로 넘기면되고, nCmdShow는 윈도우를 화면에 출력하는 방법을 지정하는 것인데 다음과 같이 정의되어 있다.

SW_HIDE : 윈도우를 숨긴다.
SW_MINIMIZE : 윈도우를 최소화 하고 활성화 시키지 않는다.
SW_RESTORE : 윈도우를 활성화 시킨다.
SW_SHOW : 윈도우를 활성화하여 보여준다.
SW_SHOWNORMAL : 윈도우를 활성화하여 보여준다.


'프로그래밍 > API' 카테고리의 다른 글

[API] 커서 바꾸기..  (0) 2011.08.03
[API] 메시지 루프  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 유니코드  (0) 2011.07.31
[API] 핸들에 대한 이해..  (0) 2011.07.31
Posted by 바람처럼..
|
winMain 함수에서 가장 중요한 일은 메인 윈도우를 만드는 일이다. 그러기 위해서는 윈도우 클래스를 먼저 등록한 후 CreateWindow 함수를 호출 해야 한다. 윈도우 클래스는 만들어질 윈도우의 여러 가지 특성을 정의하는 구조체이며 windows.h에 다음과 같이 정의 되어 있다.

typedef struct tagWNDCLASS
{
        UINT                 style;
        WNDPROC         lpfnWndProc;
        int                     cbClsExtra;
        int                     cbWndExtra;
        HINSTANCE       hInstance;
        HICON               hIcon;
        HCURSOR          hCursor;
        HBRUSH            hbrBackground;
        LPCSTR            lpszMenuName;
        LPCSTR            lpszClassName;
} WNDCLASS;


style : 윈도우의 스타일을 정의한다. 즉, 윈도우가 어떤 형태를 가질 거인가를 지정하는 멤버이다.

lpfnWndProc : 이 멤버는 윈도우의 메시지 처리 함수를 지정한다.  메시지가 발생할 때 마다 이 멤버가 지정하는 함수가 호출되며, 이 함수가 모든 메시지를 처리한다. 흔히 말하는 메시지 콜백 함수라고 보면 된다.

cbClsExtra, cbWndExtra  : 일종의 예약 영역이다. 윈도우가 내부적으로 사용하며 특수한 목적에 사용되는 공간이다. 사용하지 않을때는 0으로 지정한다.

hInstance : 이 윈도우 클래스를 등록하는 프로그램의 번호이며, WinMain의 인수로 전될된 hInstance값을 그대로 넣으면된다.

hIcon , hCursor : 이 윈도우가 사용할 마우스 커서와 아이콘을 지정한다.

hbrBackground : 윈도우의 배경 색상을 지정한다.

lpszMenuName : 이 프로그램이 사용할 메뉴를 지정한다.

lpszClassName : 윈도우 클래스의 이름을 문자열로 정의하여서 나중에 CreateWindow 함수에 전달되며, Createwindow 함수는 윈도우 클래스에서 정의한 특성 값을 참조하여 윈도우를 만든다.

'프로그래밍 > API' 카테고리의 다른 글

[API] 메시지 루프  (0) 2011.08.02
[API] 윈도우 생성..  (0) 2011.08.02
[API] 유니코드  (0) 2011.07.31
[API] 핸들에 대한 이해..  (0) 2011.07.31
[API] API 란 무엇인가.  (0) 2011.07.31
Posted by 바람처럼..
|
유니코드는 16비트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계이다.
유니코드를 지원하려면 문자형이나 문자열에 대해 C언어의 타입을 바로 쓰지 말고 유니코드 설정에 다라 변경되는 중간 타입을 써야한다.

char -> TCHAR
char* -> LPSTR
const char* -> LPCTSTR

로 쓰면 된다.

TCHAR는 C의 기본 타입 중 하나인 char와 일단 같지만 유니코드로 컴파일 할 때는 wchar_t 타입이 된다. TCHAR 타입의 실제 정의문은 다음과 같이 조건부 컴파일문으로 작성되어 있다.

#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

 이렇게 작성되어 있기 때문에 char를 바로쓴 소스는 유니코드로 바꿀 때 일일이 소스를 뜯어 고친 후 다시 컴파일해야 하지만 TCHAR라는 중간 타입을 사용하면 프로젝트 설정에 따라 자동으로 변환해 주므로 가급적 char* 보다는 LPSTR 또는 TCHAR*를 쓰는 것이 현명하다.

유니코드용 문자열 함수는 기본 함수에 l을 붙여주면 된다.

strlen -> lstrlen
strcpy -> lstrcpy
strcat -> lstrcah
strcmp -> lstrcmp
sprintf -> wsprintf

'프로그래밍 > API' 카테고리의 다른 글

[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 핸들에 대한 이해..  (0) 2011.07.31
[API] API 란 무엇인가.  (0) 2011.07.31
[API] API 관련하여..  (0) 2011.07.31
Posted by 바람처럼..
|

 핸들(handle)이란 어떤 대상에 붙여진 번호이며 문법적으로는 32bit 또는 64bit의 정수 값이다.
윈도우즈 에서는 여러가지 종류의 핸들이 사용되고 있는데 만들어진 위도우에는 윈도우 핸들(hWnd)를 붙여 번호로 관리하고 DC(device context)에 대해서도 핸들을 사용하고 펜, 브러시 에도 핸들을 붙여 관리한다.

왜 이렇게 관리를 하냐고 한다면, 대상끼리의 구분을 위해서 이기도 하지만 문자열보다는 정수를 사용하는 것이 속도가 훨씬 더 빠르고 간편하기 때문이다. 윈도우에서는 핸들을 많이 사용하므로, 핸들의 특성에 관해 미리 숙지하는 것이 좋다.

1. 핸들은 정수값이며 대부분의 경우 32비트 값이다. 핸들을 사용하는 목적은 구분을 위한 것이므로, 핸들끼리 중복되지 않아야 하며 이런 목적으로는 정수형이 가장 적합하다. 정수형은 비교나 대입 연산이 가장 빨라서 핸들로 쓰기 적합하다.

2. 같은 종류의 핸들기리는 절대로 중복된 값을 가지지 않는다. 만약 이렇게 된다면 대상을 구분하는 본래의 목적을 달성할 수 없을 것이다. 물론 다른 종류의 핸들 끼리는 중복된 값을 가질 수도 있다.

4. 핸들은 정수형이므로 값을 가지겠지만, 그 실제값이 무엇인지는 몰라도 상관없다. 핸들은 크고 작음의 성질을 가지는 숫자가 아니라 단순한 표식일 뿐이다. 핸들형 변수를 만들어 핸들에 대입받아 쓰고 난 후에는 버리면 된다.

'프로그래밍 > API' 카테고리의 다른 글

[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 유니코드  (0) 2011.07.31
[API] API 란 무엇인가.  (0) 2011.07.31
[API] API 관련하여..  (0) 2011.07.31
Posted by 바람처럼..
|

일단 먼저 시작하기에 앞서. API란 무엇인가에 대하여 생각해 볼 필요가 있다.

API란 Application Programming Interface의 약자이며 운영체제가 제공하는 함수의 집합이라고 보면 된다 .

쉽게 설명하면 프로그램 개발자들이 운영체제의 복잡한 내부 동작까지 이해하고 있기는 쉽지 않으므로, 운영체제에서 기본적인 동작을 하는 함수의 집합을 말한다고 보면된다. 

또 API라는 의미는 운영체제의 함수 집합이므로 정확히 따지면 윈도우즈 API라고 해야하지만 요즘 대부분 API라고 하면 윈도우즈 API라고 생각하기 때문에 생략하는 경우가 많다.

 또 흔히 처음 프로그래밍을 접하는 사람들은 보면, 뭐 부터 배워야 하나요 이러면서 c, c++, api, mfc 이런식으로 순서를 정하는 경우가 많은데... 잘 생각해보면 다 독립적이 아니라 하나의 큰 집합의 부분집합 들일 뿐이다.

c의 문법은 거의 대부분 c++에 적용된다. c++은 c에 비하여 객체지향적 요소가 더해진 말하자면 ++, 확장형이다.

api는 이런 문법을 기반으로 윈도우 프로그래밍을 도와주는 함수 집합일 뿐이고, MFC는 Microsoft
Foundation Class의 약자로, 저런 api들이나 제공 클래스들을 하나 묶어서 쓰기 쉽게 만든 형태라고 보면 거의 맞다. (엄밀히 따지자면 아닌 부분도 있지만, 처음 이해할 때는 그런 식으로 하는 것이 쉽다는 의미)

 즉, 배워나가는 순서보다는, C와 C++의 문법의 이해가 선행되면, api나 mfc는 하나의 방법들 이므로 응용해서 사용하기만 하면 충분하다.

'프로그래밍 > API' 카테고리의 다른 글

[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 유니코드  (0) 2011.07.31
[API] 핸들에 대한 이해..  (0) 2011.07.31
[API] API 관련하여..  (0) 2011.07.31
Posted by 바람처럼..
|

API 관련 카테고리에서는 유명한 책인

한빛미디어에서 나온 API 정복이란 책의 내용을 정리하겠습니다.

그렇다고 무턱대고 책의 내용을 배껴오는 것이 아니라 간단한 예제를 수록하는 정도로

정리할 예정입니다.  

'프로그래밍 > API' 카테고리의 다른 글

[API] 윈도우 생성..  (0) 2011.08.02
[API] 윈도우 클래스  (0) 2011.08.01
[API] 유니코드  (0) 2011.07.31
[API] 핸들에 대한 이해..  (0) 2011.07.31
[API] API 란 무엇인가.  (0) 2011.07.31
Posted by 바람처럼..
|