2011-01-20 2 views
3

Spy ++를 사용하면 버튼을 입력하는 마우스가 일련의 WM_TIMER를 트리거한다는 것을 알았습니다.Windows는 시간을 초과 한 GUI 애니메이션을 어떻게 처리합니까?

Windows는 어떻게합니까? OS가이를 알리거나 X 밀리 초 후에 함수 포인터를 호출하도록 요청합니까, 아니면 위젯이 자신의 타이머 proc를 등록합니까?

내가 알고 싶은 이유는 내가 게임 GUI API를 C++로 제작하고 있으며 이러한 종류의 메커니즘을 통합하고자하기 때문입니다.

감사

답변

1

MS Windows의 GUI 애니메이션 기능은 매우 제한적입니다. Mac OS X과 같은 실제 애니메이션이 가능한 OS를 알고 있다면 아무 말도 할 수 없습니다.

Windows GUI는 자체 이벤트 처리 루틴과 드로잉 코드가있는 다양한 하위 창의 구성입니다. 물론 매우 비현실적이고 성능이 비효율적이기 때문에 일반적인 개발자에게만 쉽게 액세스 할 수 있습니다.

간단히 말해, MS Windows는 게임 GUI 프레임 워크를 개발할 때 가장 권장할만한 참조라고 말하고 싶습니다. 새로운 GUI 프레임 워크를 개발할 기회가 있다면 우선 게임 프로그램처럼 통합 된 화면 그리기를 위해 입력 이벤트 처리와 그래픽 드로잉을 분리하는 메커니즘을 고안 할 것입니다. 대부분의 게임이 윈도우의 표면에 직접 스프라이트를 그릴 때보다는 http://www.rawmaterialsoftware.com/juce.php

http://www.rawmaterialsoftware.com/images/demoscreenshot1.jpg

5

나는 버튼의 윈도우 프로 시저가 WM_TIMER 메시지를 통해 알림 창을 등록 할 SetTimer 기능을 사용하고 있다고 생각합니다. SetTimer을 사용하면 시간이 지나면 특정 기능을 호출하거나 지정된 정보로 WM_TIMER 메시지를 트리거 할 수 있습니다.

+0

ATL/WTL로이를 수행 할 수있는 '적절한'방법이 있는지 알고 계십니까? 아니면 직접 손으로 코딩해야합니까? – Mehrdad

+0

@Mehrdad :이 대답이 쓰여지 자마자, 모든 것을 스스로해야만했습니다. 최신 버전의 Windows에는 "애니메이션 관리자"가있어 진동하는 버튼과 전환 같은 애니메이션을 만들 수 있습니다. –

0

게임 API는 응용 프로그램의 실제 메시지 루프에서 자신의 타이밍을 정상적으로 것 :

이에서보세요 개별 자식 창을 사용합니다.

자식 창으로 빌드되는 자체 애니메이션 컨트롤은 일반적으로 단기 상태를 처리하기 위해 SetTimer를 통해 WM_TIMER 메시지를 자체적으로 예약 할 수 있습니다. 마우스를 놓을 때 WM_MOUSELEAVE를 통해 알림을 받기 위해 Button이 TrackMouseEvent API를 사용했을 수 있습니다. 단추.

폼 기반 응용 프로그램에서 고급 애니메이션을 허용하기 위해 Microsoft는 Windows Animation Manager을 도입했습니다.

관련 문제