使用位图控件

时间:2010-11-21 22:50:20

标签: c winapi controls

如何使用使用鼠标拖动时变化的位图(例如旋转旋钮)进行控制?这使用Win32 API?

2 个答案:

答案 0 :(得分:2)

编写代码以识别控件窗口过程中的WM_MOUSEWHEEL消息。

答案 1 :(得分:0)

以下是您在简单游戏中看到的典型循环。这不是一个好的做法,而是一个很好的基础:

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

    draw_frame();
}

特别注意第二个“while”,这样做比做“if”更好,你将能够更准确地处理组合事件。

过了一段时间,你可能需要基于时间的物理,它会变得更复杂(使用累加器)。我正在写一个相当简单的游戏的样本:

/* 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_update等是通用函数(它们使用函数指针在游戏状态下执行函数)。
在您的情况下,方块的转换将在事件处理程序中更改,该处理程序捕获mouse_move事件并具有捕获mouse_press / release事件的状态。在 update 中,您将更改方块的位置/ etc数据。在 draw 例程中,你会对方块进行blit。 (除非您使用其他框架,如OpenGL在渲染管道中使用矩阵变换)