Управление с растровыми изображениями - PullRequest
0 голосов
/ 22 ноября 2010

Как создать элемент управления с помощью растровых изображений, которые меняются при перетаскивании мышью (например, вращающейся ручкой)? И это с помощью Win32 API?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Введите код для распознавания сообщения WM_MOUSEWHEEL в процедуре окна вашего элемента управления.

0 голосов
/ 22 ноября 2010

Ниже приведен типичный цикл, который вы увидите в простых играх.Это не хорошая практика, но хорошая основа, на которой стоит опираться:

while(!quit) {
    while(evt = events_left_for_processing) {
        react_to_event(evt);
    }

    draw_frame();
}

Обратите особое внимание на второе «время», лучше сделать это так, чем «если», вы будетеуметь обрабатывать комбинированные события более точно.

Через некоторое время вам может понадобиться физика, основанная на времени, и она станет более сложной (с использованием аккумуляторов). Образец из довольно простой игры, которую я писал:

/* Time-based animation loop.
 * Accumulator idea picked from an article by Glenn Fiedler on gafferongames.com */
while(!done) {
    /* Input */
    while(SDL_PollEvent(&evt)) {
        window_event(evt, &done);
    }

    /* Physics */
    newTime = time();
    deltaTime = newTime - currentTime;

    if(deltaTime > 0.0f) {
        currentTime = newTime;
        accumulator += deltaTime;
        while(accumulator >= dt) {
            window_update(t, dt);
            accumulator -= dt;
            t += dt;
        }
    }

#ifdef FPS_CAPPED
    drawTime = newTime - currentDrawTime;
    /* Draw */
    if(drawTime >= FPS_CAPPED) {
        currentDrawTime = newTime;
#endif
        window_draw();
        SDL_GL_SwapBuffers();
#ifdef FPS_CAPPED
    }
#endif
}

window_updateetc - это обобщенные функции (они выполняют функцию в игровом состоянии, используя указатели функций).
В вашем случае преобразование квадрата будет изменено в обработчике event , который перехватывает события mouse_move иимеет состояние для перехвата событий mouse_press / release.В обновлении вы бы изменили данные о квадрате / etc.В рутине draw вы бы сместили квадрат.(если вы не используете другие платформы, такие как OpenGL, которые используют матричные преобразования в конвейере рендеринга)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...