MFC에서 OnCreate 함수를 통해 애니메이션 속도 조정하기
조회수 640회
제가 예를들어 하나의 라인이 위에서 아래로 움직이는 동작을 만드려고 할 때
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 여기에 특수화된 작성 코드를 추가합니다.
SetTimer(0, 10, NULL);
return 0;
}
이렇게 할 때와
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 여기에 특수화된 작성 코드를 추가합니다.
SetTimer(0, 1, NULL);
return 0;
}
이렇게 할 때가 속도가 같습니다.
제가 알기론 SetTimer
의 두번째 인자가 값이 낮을 수록 더 빨라지는 것으로 알고 있는데 어째서 10 이하로는 어떤 숫자를 넣어도 속도가 같아지나요?
OnTimer
함수를 호출하는데 있어서 더 빠른 속도를 원한다면 OnCreate
함수가 어떻게 고쳐져야 하나요?
1 답변
-
If uElapse is less than USER_TIMER_MINIMUM (0x0000000A), the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM (0x7FFFFFFF), the timeout is set to USER_TIMER_MAXIMUM.
공식 문서에 보시면 0xA~0x7fffffff까지의 값만 저장한다고 합니다. 0xA가 10입니다. 10보다 작은 값을 넣으면 10으로 세팅한다고 합니다.
사물의 움직임을 빠르게 하는 방법으로는 타이머 메시지를 더 짧은 간격으로 발생시켜 처리하는 방법도 있습니다만, 다른 한편으로 타이머 메시지를 처리할 때 사물이 움직이는 양(폭)을 현재보다 늘리면 사물은 더 빠르게 움직이게 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 마이크로소프트 공식 홈페이지에 있는 MFC 가이드에는 OnCreate 관련 문서가 나오지 않던데 저도 참고하고 싶습니다. 괜찮으시다면 어떤 사이트에서 보신 건지 알려주실 수 있을까요? 김동민 2022.5.30 15:10
- https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-settimer 알 수 없는 사용자 2022.5.30 15:12
- 아 그리고 후에 알려주신 방법을 사용할 수 없는 이유가 제가 만들고 있는 프로그램이 도형의 색을 칠하는 기법 중 하나인 Winding 기법을 학부생 수준으로 직접 구현을 해보는 것입니다. 임의의 라인 하나가 y축으로 1씩 증가하면서 도형의 선분 중 하나와 충돌을 하면 내부로 인식해야 하는 코드인지라 타이머 메시지에서 1 이상의 값을 넘겨주기는 어려울 것 같습니다. 때문에 Create 함수에서 처리하려고 했던 것인데... 코드를 갈아 엎어야 할 수도 있겠네요. 김동민 2022.5.30 15:13
- 예를 들어 현재는 하나의 타이머 메시지 발생시 y축으로 1씩 증가시킨후 처리를 한번 하고 결과를 출력하였다고 한다면, 하나의 타이머 발생시 y축으로 1씩 증가시킨 후 처리하는 것을 for루프 등으로 10회 처리한 후 10회처리한 결과를 최종적으로 한번만 출력하면 속도가 10배가 된 것과 같겠지요. 알 수 없는 사용자 2022.5.30 15:48
- 그렇게 하면 확실히 빨라지긴 하겠네요! 의견 감사합니다! 김동민 2022.5.30 18:36
-
댓글 입력