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 답변

  • 좋아요

    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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)