본문 바로가기
코스웨어/15년 스마트컨트롤러

20151113 - 강동조 API 개인 업무일지 2일차

by 알 수 없는 사용자 2015. 11. 13.
728x90
반응형

L을 붙이는 이유는 아스키 코드 떄문이다 유니 코드라는 것이 개발이 되었다 2바이트체제의 문자를 가지고 있다 char255개이고 유니 코드는 65535까지 가질 수 있다 예전부터 win32char에 맞쳐져 있다 wchar이고 유니코드를 넣을 수 있는 변수타입이고 일종의 short변형이다 문제는 ""하면 아스키코드 문자이냐 유니 코드 문자이냐 단종 지을수 없기에 ""만 쓰면 C처럼 인지하고 char로 인지 하게 된다 win32문자는 2bytewchar에 맞쳐져있다 그렇기에 ""2byte로 인지해야하기에 깨질 수밖에 없다 First하면 Fi가 두개 들어가기에 글자가 이상하게 나온다

1. TEST("First") win32방식이다 아무대서나 문제가 생기지 않는다

2._T("First") MFC권장이다

3. L"First" 다른곳가서는 문제가 생길수도 있다

멀티코드 -> 영어 ->Byte 한글 -> 2Byte

유니코드 -> 2Byte



WS_CAPTION

WS_SYSMENU

/* CAPTIONSYSMENU 는 꼭 같이 들어간 상태에서 추가해서 사용 한다 */

WS_THICKFRAME // 창을 늘리거나 줄일 수 있게 만들어 준다

WS_MINIMIZEBOX // 최소화 박스를 활성화 시켜준다

WS_MAXIMIZEBOX) // 최대화 박스를 활성화 시켜준다


DC의 필요성

Device Context라고 부르며 줄여서 DC이다

그래픽 상태를 읽어 오는 함수와 읽어온걸 패기 하는 함수가 존재 한다

GDI(Graphic Device Interface)

예전에는 핸드폰게임을 만들 떄도 핸드폰 제각각 게임을 다 만들었다

이걸 극복하고자 나온게 오락을 자바로 만든다 가상머신에 맞게만 만들면 된다

가상머신이 축소 및 확대를 시켜준다

자바의 최고의 장점은 모든기기에 적용 된다는 것이 장점이다 단점은 가로를 1000자를 만들었다

다른 핸드폰은 2천자라 한다면 늘려야 한다 늘리면 깨지는 형상이 일어 난다

아이폰은 C로 개발 한다 아이폰은 아이폰 종류에 맞게 다 만들어야 한다

종류가 예전보다 작기 떄문에 그나마 괜찮다 그래픽만 다르게 만들면 된다 알고리즘은 같다

최적화가 잘되어 있기에 가장 큰 메리트이다 

인자가 많은데 3개만 인자를 넘겨 주게 되면 대체할 수 있다

뒷정보 앞에 정보를 알아서 얼마를 가려야 하는 것 까지 윈도우가 다 계산해야 한다 화면에 보이는건 2D이고 윈도우개념은 3D이다 


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

{

    HDC hdc;

    switch (iMessage)

    {

        case WM_DESTROY:

            PostQuitMessage(0);

            return 0;

        case WM_LBUTTONDOWN:

            hdc = GetDC(hWnd);

            TextOut(hdc, 100, 100, "Beautiful Korea", 15);

            ReleaseDC(hWnd, hdc);

    return 0;

    }

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

}


보이는 것과 같이 마우스의 모양을 바꿀 수 있습니다


상승엣지 하강엣지를 생각하면 된다 마우스를 누르는 순간 글자가 나오게 된다 


   

HDC에 커서를 옮기고 F12를 누르게 되면 그 정보들이 나오게 된다 구조체까지 확인할 수 있다


창을 움직이거나 최소화 하게되면 글자가 사라지고 그림만 그려진다 글까지 적기 위해서 WM_Paint를 사용하게 된다




WM_Paint를 이용해서 글을 사라지지 않게 만들어 준다 Paint구조체 변수  ps를 인자로 넣어준다


TextOut에 크기가 정해지고 글을 가운대로 이동시키는 함수가 SetTextAlign함수이다 두번쨰 인자로 인해서 센터나 좌측 우측으로 이동시킨다


선을 그을수 있는 좌표이다





실행결과




무효화

InvalidateRect 무효화한 영역

겹쳐져서 안 보이는 공간이 무효화한 영역이다



게임도 마찬가지다 이동을 하게 되면 이동하기 전 부분은 없기 때문에 다시 그리라고 한다

단 마우스 모양은 WM_PAINT를 받지는 않는다 나머지 창같은 경우는 윈도우가 WM_PAINT를 넣어준다

창을 잡고 흔들 때 cpu사용량도 올라 간다 


 BOOL InvlidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);

HWND hWnd : 다시 그려져야 할 윈도우의 핸들 WndProc가 호출될 때 전달되는 hWnd를 그대로 사용 해주면 된다

CONST RECT *lpRect : 두 번째 인자는 무효화하고 다시 다 그린다

BOOL bErase : 배경을 모두 지우고 다시 그릴지 아니면 배경을 지우지 않고 그릴 것 인지 정한다

 

오락은 알고리즘이다 이동한 곳과 이동되기 전을 그려주기만 하면 된다


WM_KEYDOWN

 

숫자 같은 부분은 그냥 적으면 되지만 방향키 같은걸 이용 할때에는 KEYDOWN을 이용한다

특정 좌표를 누르면 글자를 출력하게 만들면 된다 가상 키 코드 VK만 잘보면 된다 키를 누루면 키가 눌렀다는 메시지를 WParam에 넘겨준다 FALSE를 하게되면 A를 누른것만 움직이는게 보이게 되고 TRUE를 하게 되면 검은선이

그려지면서 움직이게 된다 오락의 기본 개념이다


TRUE인 경우


FALSE인 경우


방향키를 막아준다 오락의 기본 조건이다












728x90