9.18(화) 이론-1

from Study/API 2007/10/10 17:54 view 22324
1. Mouse, 키보드에 대한 이야기

- RIT는 항상 자기와 연결된 Thread의 ID를 보관하고 있는데 이를 Foreground Thread 라고 한다.(하나존재)
- 마우스 : WindowFromPoint , 키보드 : Foreground Thread로 전달한다.( PostThreadMessage(ID) )
- RIT는 쓰레드 ID만 보고 ID에 해당하는 메시지 Q에 전달하면 GetMessage 로 메시지를 꺼내 DispatchMessage 를 사용해서 해당 WndProc에 메시지를 보낸다. 현재 포커스에 입력되게 된다.

- Activate(활성창)은 최상위 윈도우가 관리하고, Focus는 Top-leve 윈도우단위로(스레드) 관리하게 된다.

- 키보드 => Scan Code:Hardware => 드라이버에서 가상키코드로 변환(대소문자x) => WM_KEYDOWN  => TranslateMessage 가상키코드를 분석하여 대소문자를 구분시켜준다.=> Focus에 입력

- 키보드 메시지 종류 ( wparam : 가상키코드, lparam : 스캔+a )
  1) WM_KEYDOWN
  2) WM_KEYUP
  3) WM_SYSKEYDOWN  (ALT
  4) WM_SYSKEYUP
  5) WM_SYSCHAR
- CTRL+ALT+DEL, ALT+TAB.. RIT가 시스템으로 넘겨주게 된다.

- TranslateMessage : 가져온 메시지가 키보드 메시지이고 wParam의 키가 문자키라면 WM_CHAR메세지를 Q에 넣는다.!!
- 문자키 : WM_CHAR,      기능키 : WM_KEYDOWN

- 키보드 상태조사 ( 상위 8비트 : 일반키 상태 , 하위 8비트 : 상태키 )
  1) GetKeyState( VK_SHIFT ) & 0xFF00 ) // 시프트와 왼쪽 마우스클릭조사
      : 마우스, 키보드 메시지 처리를 한다. 현재 키보드상태를 조사한다.
  2) GetAsyncKeyState( 가상키코드 )

- 캐럿은 개별 스레드자원이므로 Focus를 얻을 때 생성, 잃을 때 파괴 해줘야 한다.
   : 감추고 파괴해야 Caret 내부에 있는 문자가 깨질 우려가 없다.
- 커서는 시스템 자원이므로 관여 할 필요 없다.

2007/10/10 - [Study/API] - 9.18(화) 실습-1
Tag | ,

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다