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

20151116 임현수 업무일지 WIN32API #3

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


■ TranslateMessage

▲ 오직 TransleateMessage()가 wm_char메시지를 생성한다.
DispatchMessage() wndProc을 호출한다.

keydown이 전달되려면 translate와 dispatch까지 통과되어야 한다.

만약 translate를 빼버리면 char는 절대로발생하지 않는다.

■ 마우스


WndProc의 wparam, lparam
옛날엔 2, 4 바이트
지금은 4, 4 바이트

키보드조합이 wparam, lparam으로 오는것처럼 마우스도 마찬가지이다.

넘어오는 정보중의 일부가 좌표정보이다.

lparam에서 x, y좌표가 날라온다.
이걸 절반으로 자르면 x, y좌표를 얻을 수 있다.

이 좌표는 바탕화면 기준이아니고, 창내부의 좌표를 의미한다.

wparam정보에는 마우스버튼 상태와 키보드와 조합 상태가 전달된다.

lparam이 32비트이므로
x좌표 16비트, y좌표 16비트로 이루어졌으니
약6만5천, 약6만5천개가 한계라고 할 수 있다.

나중에 고해상도가 나왔을 때 lparam의 long을 8바이트로 올리면
약40억, 약40억이 되니 해결된다.

매크로함수


BOOL형 - typedef해서 만들어 놓았음.

소스코드를 보면 실제로 선을 긋고있다라고 볼 수 있다.

lsprintf();
윈도우에서 2바이트 유니코드체제를 출력할때 쓰는 함수.

▲ 마우스움직임에 따라 좌표가 표시된다.


■ 더블클릭


▲ 더블클릭으로 화면 삭제하는 소스

■ Timer


WM_CREATE는 창이 만들어질 때 딱 한번 호출된다.
SetTimer 타이머를 만드는 함수.

타이머를 여러개 사용할 수 있기 때문에

1000은 milisec단위이다.

안적으면 wmtimer라는 메시지만 만들어진다.
mytime에 넣어준다.

현재시간을 초로 갖고잇기때문에 계산을 ctime이라는 함수를 호출하면 문자열로 바꿔준다.

그 주소를 str에 집어넣고잇다
글자가 바뀐것의 주소를 갖고있다.
그래서 시간이 계속 뿌려진다.

KillTimer의 두번째인자가 1인데 이게 타이머번호와 일치해야한다.

주로 이 타이머의 용도는 게임같은거 보면 미사일 속도라던가..... 그런 거다.


■ SendMessage

타이머가 여러개 사용될 수 있기 때문에, sendMessage의 3번째 인자를 타이머번호로 지정한다.

■ 콜백 함수


폴링방식

■ 작업 영역


■ 메뉴 생성

메뉴이름 앞에 &를 붙이면 밑줄이 간다.(Alt + 단축키 사용가능)

각각의 메뉴는 번호로 관리한다.
메뉴번호는 비쥬얼스튜디오가 알아서 정한다.

메뉴번호는 추가할때마다 계속한다.
메뉴를 삭제해도 그 메뉴번호를 재사용하지 않는다.

어떤 메뉴를 클릭하던지 하던지 WM_COMMAND가 생성된다.


■ 커서 생성

▲ 커서 역시 ID가 자동생성된다.


728x90