2010년 1월 22일 금요일

MFC practice #2

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를 활용하는 것이 여러모로 유익함.




댓글 없음:

댓글 쓰기