728x90
반응형
WinAPI
- 마우스
-
- 마우스를 눌렀을 때 들어오는 인자 lParam, wParam으로 마우스 클릭 정보를 알 수 있다
- lParam 인자를 통해 좌표값이 들어온다
-
- 화면이 아니라 윈도우 창을 기준으로 얻은 좌표값이다
- 각각 16 bit를 가진다
- wParam 인자 값을 통해서는 Shift, Ctrl 상태가 전달된다
-
- 마우스 관련 발생하는 윈도우 메시지
-
- wParam에서 전달되는 마우스 클릭 관련 정보
-
- 마우스 관련 예제
- WinAPI는 기본적으로 도스의 C이므로 모르는 자료형은 define되어있다
- 유니코드 지원함수
-
- C에서 쓰던 함수들은 WinAPI로 가면서 문자열을 2바이트 처리하도록 유니코드 지원함수로 바꿔줘야한다
- 유니코드 지원함수는 C 함수 앞에 l이나 w를 붙여서 쓴다
-
- sprintf -> wsprintf
- strlen -> lstrlen
- 화면에 마우스의 좌표값을 표시하는 프로그램
- 더블클릭
-
- 더블클릭 이벤트를 발생시키기 위해서는 WinMain 함수의 WndClass를 수정해야한다
-
- WndClass.style에 CS_DBLCLKS를 or로 추가시켜준다
- 위의 예제에서
-
- WM_PAINT에 TextOut하는 코드를 WM_LBUTTONDOWN으로 옮긴다
- LW_LBUTTONDOWN의 InvalidateRect를 지운다
- 아래 그림과 같이 WM_LBUTTONDBLCK 메시지를 추가시킨다
- 소프트웨어 타이머
-
- SetTimer(hWnd, 타이머 번호, ms 단위의 타이머 호출 간격, 호출되는 함수 주소)
-
- 타이머를 만드는 함수
- 타이머 번호: 만들어진 여러개의 타이머를 구분
- 호출되는 함수 주소를 NULL로 하면 WM_TIMER라는 메시지만 생성된다
-
- WndProc이 호출됨
- time(&변수)
-
- 현재 시간을 초로 알아내는 함수
- ctime(&변수)
-
- time에서 얻은 시간을 문자열로 변환
- KillTimer(hWnd, 타이머 번호)
-
- 타이머를 다 쓰고 닫아줘야함
- 타이머 번호는 만들 때와 같아야 한다
- WM_CREATE
-
- 창이 생성될 때 만들어지는 메시지
-
- 타이머를 이용해 현재 시간을 표시하는 프로그램
-
- 위의 함수들은 char * 형에 맞춰져 있으므로 유니코드를 기반으로 하는 현재 소스에서는 사용할 수 없다
-
- 아래의 함수들을 사용하여 현재 시간을 구하고 문자열로 변환한다
-
- GetLocalTime(&SYSTEMTIME)
-
- SYSTEMTIME 형 변수에 현재 시간관련 정보를 받아온다
- wsprintf(sTime
, TEXT("지금 시간은 %d:%d:%d입니다")
, st.wHour
, st.wMinute
, st.wSecond); -
- wsprintf로 sTime 배열에 현재 시간관련 정보를 삽입한 유니코드 문자열을 복사한다
- 위의 프로그램에서 프로그램이 실행되자마자 시간이 뜨도록 하는 방법
-
- WM_CREATE 메시지가 발생할 때 SendMessage로 WM_TIMER 메시지를 강제 발생시킨다
- LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
-
- 프로그래머가 직접 윈도우 메시지를 발생시키도록 하는 방법
- Msg: 발생시킬 윈도우 메시지 종류
- wParam, lParam: WinProc이 실행될 때 전달되는 인자를 직접 설정
-
- 보통 타이머 번호를 같이 전달
- 타이머를 여러개 사용하면 WM_TIMER에서 case를 이용해 타이머 번호로 발생한 타이머를 구분한다
- 콜백 함수
-
- 메시지가 아니라 함수 호출로 타이머를 실행하는 방식
-
- WM_TIMER의 경우 다른 메시지에 밀려 정확한 시간에 실행되지 않을 수 있다
- CALLBACK 으로 타이머에서 호출할 함수를 만들고 SetTimer의 네번째 인자에 실행할 함수의 이름을 적는다
-
- 타이머가 발생할 때 마다 100개의 점을 윈도우에 찍는 프로그램
- 콜백 함수
-
- 운영체제가 필요할 때 호출하는 함수
- 작업영역
-
- GetClientRect()
-
- 윈도우의 클라이언트 영역의 크기를 RECT 형 변수로 가져온다
- 윈도우의 정중앙
-
- 윈도우의 중심에 문자열을 출력하는 프로그램
- WM_SIZE
-
- 창 크기를 바꿀 때 생기는 메시지
- WM_MOVE
-
- 창을 이동시키면 호출되는 메시지
- 리소스 편집기
- 메뉴 리소스 추가 순서
- WinMain 수정
-
- resource1.h를 include
- WndClass.lpszMenuName = MAKEINTRESOURCE( 메뉴 ID ); 추가
- 메뉴로 인해 발생하는 메시지는 WM_COMMAND로 들어온다
-
- wParam: 메뉴 번호(resource.h에 정의된 값)
- switch 문으로 메뉴 별 동작을 설정한다
- 메뉴를 선택하면 메시지 박스가 뜨는 프로그램
- 커서 그리기
-
- 리소스에서 커서 추가
- VS 아이템들을 이용해 커서를 그리고 저장
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151116_박서연_일일업무일지_API(3) (6) | 2015.11.16 |
---|---|
20151116 업무일지 -여지윤- (3) | 2015.11.16 |
20151116-주재민-win32API_3일차 (3) | 2015.11.16 |
2015-11-16 Win32 API 개인업무일지 - 천정호 (3) | 2015.11.16 |
20151116-김재홍-win32API_3일차 (2) | 2015.11.16 |
2015.11.16 -권오민- WinAPI-3일차 (3) | 2015.11.16 |
20151116 22번 업무일지 우대희 API (3) | 2015.11.16 |
20151116 임현수 업무일지 WIN32API #3 (2) | 2015.11.16 |