▣Keyboard 입력
[Mission]
-static window를 하나 띄워서 좌우 화살표키를 입력시 해당 방향으로 10 pixel씩 이동하는 프로그램
Procedure>
1. CxxView class에 CWnd class 객체를 멤버로 등록하여 추가함(ex. m_wndChild)
2. CxxView class에 WM_CREATE메시지 핸들러 함수(OnCreate()) 등록하고
윈도우(m_wndChild)를 생성(Create())하는 코드 추가
ex)m_wndChild.Create(TEXT(" ........
-> 특정 window를 생성하는 작업(이 단계에서 형태,이름,좌표,크기등이 정의됨)
3. CxxView class에 WM_KEYDOWN 메시지 핸들러 함수(OnKeyDown())를 등록하고
윈도우(m_wndChild)를 이동시키는 코드 추가
ex)주요함수의 흐름↓
m_wndChild.GetWindowRect(&Rect); //child window의 좌표 정보 획득
ScreenToClient(&ptChild); //스크린 기준좌표를 client view 기준의 좌표로 환산
switch/case문 > 화살표키 입력시 x축 좌표값을 증감시키는 기능 구현
m_wndChild.SetWindowPos(&CWnd:: .....) //변경된 새 좌표로 child window이동시킴
4. build & run
[Additional Mission]
-child window가 위/아래로도 이동할수 있도록 코드 추가
-Alt키와 함께 화살표키 눌렀을 경우 윈도우의 이동폭이 더 커지도록 코드 추가
-window의 위치가 바뀌는 것이 아니라 크기가 커지거나 작아지도록 코드 수정
[Summary]
-keyboard 입력 관련 window message정리
.WM_KEYDOWN: Alt, F10을 제외한 모든 키에 대해, 키를 눌렀을때 발생하는 메시지
/제어관련 Key에 해당(화살표, 엔터, ESC, backspace...)
/OnKeyDown() :메시지 핸들러 함수.
.WM_KEYUP: WM_KEYDOWN 에 대응
.WM_SYSKEYDOWN: Alt, F10 이 눌려졌을 때 발생하는 메시지.
/Alt키와 조합된 키(제어키) 입력에 대해 호출됨.(Alt+enter등)
/OnSysKeyDown()
.WM_SYSKEYUP: WM_SYSKEYDOWN에 대응.
.WM_CHAR: WM_KEYDOWN중 ASCII코드의 문자에 해당하는 키는 메시지루프의
TranslateMessage()함수가 WM_KEYDOWN메시지를 WM_CHAR메시지로 전환하여 전송
문자열 입력을 처리하고자 할시에 등록하여 사용
/제어키를 제외한 알파벳, 숫자 등의 문자열에 해당
/OnChar()
.WM_SYSCHAR: Alt키와 문자키 입력이 조합된 경우에 발생 (ex. Alt+s)
/OnSysChar()
-CString class: MFC가 제공하는 문자열 처리 class (p.150)
/문자열 처리에 필요한 메모리를 알아서 관리하므로 메모리 할당/해제하는 코드를 작성할 필요 없음.
/일반 char배열을 이용한 문자열 처리보다는 CString class를 활용하는 것이 여러모로 유익함
댓글 없음:
댓글 쓰기