728x90
반응형
WinAPI
- 문자열이 한문으로 출력되지 않기위해 ""앞에 따로 처리해줘야함
-
- 윈도우가 문자열을 2바이트 유니코드로 인지하여 1바이트 표현인 "" 문자열이 깨진다
- 유니코드
-
- 2바이트의 문자 체제
- 모든 문자를 2바이트로 처리한다
- 아스키코드도 포괄한다
-
- 아스키만 사용할 때는 1바이트로 씀
- C에서 일반 문자열은 1바이트를 쓰지만 최신 언어는 언어를 보통 2바이트로 사용
- win32는 1바이트와 2바이트 방식이 혼재되어 있음
-
- 1바이트 문자열은 char 형
- 2바이트 문자열은 wchar 형
- C로 배운 함수는 char로 인지, Win32 함수를 호출하면 wchar로 인지
- 컴파일러가 문자열을 wchar로 인지하도록 하는 방법
-
- L""
- TEXT(""): 주로 win32에서 사용
- _T(""): 주로 mfc에서 사용
- 윈도우 배경색 바꾸기
- 윈도우 모양바꾸기
- 윈도우 창 모양 바꾸기
-
- CreateWindow의 세번째 인자
- 윈도우 커서 바꾸기
- DC(Device Context)
-
- 장치의 상태를 저장한다
- device가 무엇인지는 알 필요 없음
- 그리기 동작을 수행할 때 GDI(Graphic Device Interface) 등의 그래픽 상태를 읽기/읽어온 상태를 폐기하는데 사용한다
- 그리기에서 DC 활용
-
- 그리기에 필요한 정보들을 DC에 저장한다
- DC를 활용함으로써 그리기 함수에서 화면 크기와 DC의 핸들 하나만 넘겨주면 그리기를 처리할 수 있다.
- 현재 상황에서 어느 부분이 출력 영역인가를 확인하여 그리기를 제어한다
-
- 겹친 창에서 그릴 부분과 그리지 말아야할 부분 구분
- 옛날에는 그래픽 디바이스에 맞춰서 그래픽 크기 등을 조정해야 했음
-
- 자바로 만들면 가상 머신이 화면에 맞춰서 그래픽을 알아서 조정
- 모든 기기에서 돌릴 수는 있지만 모든 기기에서 최적화할 수는 없다
- 아이폰은 C로 계발하기 때문에 모든 종류의 기기의 해상도에 맞춰 만들어야 한다
-
- 아이폰 용 게임을 아이패드에서 실행하면 화면이 이상하게 나오곤 한다
- 디지털은 사진을 확대하면 깨지지만 아날로그는 확대하면 색이 희미해진다
- 화면에 텍스트를 그리는 예제
- dc를 얻는다
- TextOut으로 텍스트 출력
- dc를 해제한다
- 창을 가렸다 다시 띄우면 그려진 문자가 지워진다
-
- 창이 활성화될 때마다 화면을 다시 그리기때문에
- 글자가 화면에만 떴지 실제로 기록되어있지 않아서 문자는 다시 그려지지않는다
- 이를 해결하기 위해 WM_PAINT 메시지가 수신되었을 때 문자를 다시 그리도록 설정한다
- 문자열 정렬
-
- SetTextAlign 함수 사용
- 첫번째 인자로 들어간 DC를 사용하여 문자열을 출력하면 여기서 설정한 문자열 정렬이 적용된다
- RECT 구조체
-
- 사각형을 표현하는 구조체
- left, top, right, bottom 각각을 위한 4개의 숫자 사용
- RECT로 지정한 범위에 문자 그리기
-
- DrawText() 함수 사용
- 가로범위보다 문자열이 크면 자동개행된다
- 그래픽 출력 함수
-
- 점 찍기
-
- SetPixel()
- 줄 긋기
-
- MoveToEx() -> LineTo()
- 사각형
-
- Rectangle()
- 타원
-
- Ellipse()
- 메시지 박스
-
- MessageBox() 함수를 사용한다
- 두번째 인자는 메시지 박스 내용, 세번째 인자는 메시지 박스 이름
- 선택한 버튼에 맞는 인덱스를 반환한다
- 4번째 연산에서 or 연산으로 메시지 박스 안에 아이콘을 넣을 수도 있다
- WM_CHAR 메시지
- 무효화 영역(Invalidate 영역)
-
- 다른 창에 가려져 있었다 등의 이유로 다시 그려져야하는 영역
- BOOL InvlidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
-
- 윈도우에 무효화 영역이 있다는 것을 알려 WM_PAINT 메시지를 요청한다
- hWnd : 그려질 윈도우 핸들
- lpRect : 다시 그릴 영역
-
- 모든 영역을 다시 그리면 속도가 느려지므로 여기서 설정한 일부 영역만 그리도록 한다
- NULL이면 전 영역을 다시 그린다
- bErase
-
- 배경을 지운 후 다시 그릴 것인지 여부를 지정
- 그냥 덮어쓰는 것이 좋다
- 스페이스 바를 누르면 문자열이 지워지도록 예제에 윗윗 예제에 추가
-
- 배열 맨 앞에 0을 넣어서 문자를 지운다
- WM_KEYDOWN
-
- 가상키 코드
-
- 어떤 키보드를 연결하든 어플리케이션에 보내는 문자 코드는 일정하게 통일
- WM_KEYDOWN 메시지에서 wParam 인자로 들어온다
-
- WM_KEYDOWN의 wParam 인자를 사용한 A 움직이기
-
- 왼쪽과 위쪽으로 넘어가서 A가 안보이게 되는 것을 막는 코드 추가
- 경계처리: 이동 대상이 윈도우 범위를 넘어가지 않도록 하는 처리
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015-11-13 Win32 API 개인 업무일지 - 천정호 (6) | 2015.11.16 |
---|---|
20151113_안향진_API_02 (5) | 2015.11.15 |
20151113 - 주재민 API 개인 업무일지 2일차 (4) | 2015.11.15 |
20151113 - 강동조 API 개인 업무일지 2일차 (5) | 2015.11.13 |
2015.11.13 -권오민- WinAPI-2일차 (5) | 2015.11.13 |
20151113-김재홍-win32API_2일차-출력과 입력 (4) | 2015.11.13 |
20151113_임현수_업무일지_WIN32API#2 (3) | 2015.11.13 |
20151113 - WinAPI 두번째 시간 일지 엄민웅 (수업진도 4-1-다. WM_KEYDOWN 까지) (4) | 2015.11.13 |