Folco (./1308) :
Je fais du polling, par défaut de ne savoir faire de l'évènementiel 
C'est pas un défaut

Perso je suis pas fan de l'événementiel pour les jeux, juste parce que tu peux « facilement » zapper un événement (genre key up) et que ça nique ton gameplay. (Je prends WoW comme exemple à ce titre)
Evénementiel = possibilité de « dater » les événements, bien pour le matériel ancien, qui va galérer à l'affichage.
Sondage = état du matériel à l'instant présent, aucune idée de ce qui se passe entre deux étapes. Par contre c'est toi qui gère les key up/down (à l'aide de XOR bien placés ^^) donc impossible de manquer un événement aussi important. (Sauf si un couple up/down se produit entre deux sondages => Pas bien pour PC lents)
Pour un jeu qui tourne à un FPS moyen (30 ?) les deux se valent je dirais.
Pour les abstractions au niveau des messages, il s'agit bien de faire des communications entre des objets qui s'ignorent, et à part inventer des fonctions friend dans tous les sens ou travailler avec tout en global, je ne vois pas trop comment faire autrement (à mon niveau).
Bah justement, ils ne devraient peut être pas s'ignorer totalement. enfin, y'a au moins un truc qui devrait ne pas les ignorer.
Typiquement, un clic sur un bouton va appeler une méthode (on est d'accord jusque là non ?

), et c'est cette méthode qui va se charger de refléter le clic sur le reste du programme. (En lieu et place d'envoyer un message !) Pour un exemple, voir l'odre que j'ai donné dans un message précédent.
Après, non, tu n'aura jamais besoin de friend pour ça. Friend sert à la coopération étroite entre classes (d'ailleurs le nom est assez explicite), mais tu dois t'en sortir avec des méthodes publiques la plupart du temps si tu codes proprement.

Et pourquoi ne pas partager ces informations ? Une icone autant qu'une liste déroulante, une unité ou un ascensceur a besoin de savoir si la souris est là pour savoir quoi faire, non ? A moins qu'au niveau supérieur, on dise quoi faire faire à chaque élément affiché, ce qui contraint la classe supérieure à connaitre des données sur la classe inférieure, on revient toujours au problème de responsabilités et de délégation du travail.
Ben dans le cas d'une UI par exemple, tu connais le rectangle englobant (note: cette partie là s'applique aussi pour le jeu en lui même, et est transposable à la 3D), donc tu sais déjà à l'avance sur quel contrôle est la souris. Ensuite, tu peux lui passer les coordonnées dans son référentiel. En général (0; 0) en local = coin supérieur gauche du contrôle.
Enfin je sais pas si c'est la peine d'en dire plus, si t'as des questions tu demandera. ^^
J'ai fait le choix de la simplicité, mes essais pour tout abstraire ayant fini en une choucroute monumentale, sans une ligne de code "efficace" (faisant réellement avancer quelque chose dans le programme), par contre, yavait de la création d'objet et de l'allocation dans tous les sens. Au final, je n'ai rien fait (de concret).
C'est parce que t'as commencé par le code chiant avant de faire le code marrant, faut faire un peu des deux.

(Non sérieusement, à chacun sa manière de coder, en plus tu as déjà fait un topic là dessus (dans lequel je ne crois pas avoir posté ^^) donc pas la peine de parler de ça ici)
Mais je suis preneur d'une esquisse de solution plus précise que "gestion souris + clavier" + "dessin"
Une icone à qui je dit de s'afficher, elle a bien besoin de savoir comment est foutu le clavier pour le faire, à moins que je m'adresse 15 fois à cet objet en lui demandant différentes choses à chaque fois (et là, ça sera bien découpé mais bordelique).
Moi pas comprendre rapport clavier + affichage.

(Non désolé faudra préciser là je vois pas trop où tu veux en venir ^^)
Sinon, j'ai besoin d'une classe abstraite (Icon justement), de laquelle vont dériver toutes les icones de mon interface. Seulement, je crois que je ne peux pas avoir de données dans une classe abstraite, que des méthodes ? Et pourtant, les icones ont plein de choses en commun au niveau des données... Alors comment faire, une interface pour les méthodes et une classe pour les données, et un héritage multiple au final ? Ca me parait lourd...
Une classe abstraite c'est quand même une classe à part entière… Donc tu peux mettre ce que tu veux dedans, tu pourras juste pas créer d'instances de *cette* classe précise.
Il ne faut pas confondre avec ce qu'on appelle une interface qui ne peut effectivement pas contenir autre chose que des méthodes (abstraites, donc « virtuelles pures » en C++). Mais les interfaces ne font pas partie du standard C++, il n'y a que les classes abstraites. (Résumé: interface = encore plus spécifique que classe abstraite)