
사용자가 마우스를 클릭하면 → 스위치/센서가 전기적 신호로 변환.
마우스 컨트롤러(USB, Bluetooth 등)가 이 신호를 패킷(버튼 상태, 좌표 변화)로 변환.
마우스가 입력 신호를 OS에 알림 → 하드웨어 인터럽트 발생.
OS 커널의 마우스 드라이버가 실행 → 입력 이벤트(버튼 눌림, 좌표 변화)를 커널 공간에서 처리.
OS 커널은 이 정보를 이벤트 큐(입력 서브시스템, 예: Linux evdev, Windows Input Manager)에 저장.
좌표는 누적/상대 좌표로 관리됨.
Windows: Windows Input Manager + GDI/User32
Linux: X 서버(X11) 또는 Wayland
macOS: Quartz / WindowServer
어떤 창(window)이 클릭된 좌표에 위치하는지 확인 (히트 테스트).
포커스 정책에 따라 해당 애플리케이션에 이벤트 전달.
예: 포커스를 가진 창이 아니라면, 클릭 이벤트로 포커스 이동 후 전달.
OS는 앱의 메시지 큐에 MOUSE_DOWN, MOUSE_UP, MOUSE_CLICK 같은 이벤트를 삽입.
애플리케이션의 이벤트 루프(Event Loop)가 이를 poll → dispatch.
GUI 프레임워크 (예: Win32 API, Qt, GTK, Cocoa)가 해당 이벤트를 콜백/핸들러 함수에 전달.
애플리케이션은 이벤트 핸들러에서 동작 정의 (버튼 눌림 처리, UI 업데이트).
필요 시 다시 OS에 렌더링 요청 (InvalidateRect, Expose Event) → OS의 GUI 서버가 디스플레이에 반영.