Comment puis-je effectuer un contrôle en utilisant des bitmaps qui changent lorsque je fais glisser avec la souris (par exemple un bouton rotatif)? Et cela en utilisant l'API Win32?Commandes avec bitmaps
Répondre
Écrivez du code pour reconnaître le message WM_MOUSEWHEEL dans la procédure de la fenêtre de votre contrôle.
Voici une boucle typique que vous verrez dans des jeux simples. Ce n'est pas une bonne pratique, mais une bonne base pour construire sur:
while(!quit) {
while(evt = events_left_for_processing) {
react_to_event(evt);
}
draw_frame();
}
Portez une attention particulière à la deuxième « tout », il est préférable de le faire comme ça que de faire un « si », vous serez en mesure pour traiter les événements combinés de manière plus précise.
Après un certain temps, vous devrez peut-être physique en fonction du temps et il devient plus compliqué (à l'aide d'accumulateurs) .. Un échantillon d'un jeu assez simple, j'écrivait:
/* 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
etc sont des fonctions généralisées (ils exécuter une fonction dans l'état du jeu, en utilisant des pointeurs de fonction).
Dans votre cas, la transformation du carré serait modifiée dans le gestionnaire d'événements , qui intercepte les événements mouse_move et possède un état permettant d'intercepter les événements mouse_press/release. Dans la mise à jour vous devez modifier la position du carré/etc données. Dans la routine dessiner, vous devez masquer le carré. (sauf si vous utilisez d'autres frameworks comme OpenGL qui utilisent des transformations matricielles dans le pipeline de rendu)
Vous devrez le faire vous-même en manipulant les événements de souris et en mettant à jour l'affichage. Si vous avez des questions spécifiques à ce sujet, mettez juste à jour votre question et nous pouvons vous aider avec cela. – casablanca
Oui, j'étais si loin. Mais comment? Dois-je utiliser un contrôle statique avec un bitmap dessus? Et comment puis-je gérer les événements de la souris? – Midas