Refaire MessageBox : problème de blocage

cs_Killan Messages postés 46 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 5 février 2010 - 31 janv. 2006 à 20:59
cs_Killan Messages postés 46 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 5 février 2010 - 1 févr. 2006 à 22:04
Bonjour,


Le but :
==================================

Je crée actuellement un application graphique (DirectX) et donc je ne peu pas utiliser les "control" des forms, j'ai donc décidé de les refaire dans l'optique graphique par moi même de A à Z.

J'ai refait les formulaires et les boutons, et maintenant j'attaque les MessageBox et j'aimerais arriver à appeller l'objet et recevoir la reponse en retour comme la MessageBox existante (schéma : rep = messagebox(texte, boutonflags);).

Le contexte :
==================================

une boucle principale qui appelle la méthode de rendu (pour simplifier), celle ci appelle ces objets contenu pour s'afficher etc.

Je capte les événements et doncsi je clic surun bouton et que je veu poser une question je veu donc appeller une MessageBox (toujours de ma conception)

Ok elle s'affiche et je peu gérer les événements relatif aux boutons de cette MessageBox ainsi que la fermer une fois un bouton cliqué.

Questions et problème :
==================================

La question que je me pose est : la boucle principale qui appelle les méthodes de rendu sera t elle bloqué si dans la fonction appellée par un événement j'y met un code bloquant (attente de la reponse de la messagebox) ?

Si le code est bloquant, ce que j'imagine vu que tous codes revient à une lecture linéaire, comment pourrais-je faire pour avoir d'un coté mon rendu en boucle et à coté un appelle bloquant pour attendre la reponse de la messagebox ? cet appel ayant été fait lors d'un événement.

Si besoin de precisions, demandez :)


Solutions qui pourrait aller mais ne correspond pas à mon but :
======================================================================

Au lieu d'attendre la reponse, je dis à la messagebox d'appeller une fonction X lorsqu'elle à le resultat (ajout d'une méthode sur la pile d'un événement)

Mais ça divise mon code en 2, une fonction qui appelle et une fonction appellée par événement qui termine l'opération :s

Si il n'y a pas moyen de faire mieu je prendrais cette unique solution là, mais elle ne me semble pas optimale.



Merci à vous,

8 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 02:32
Salut,

Si tu as une fonction bloquante le mieux c'est d'utiliser un second thread.

Tu as refait les contrôles "from scratch" !? Avec DirectDraw ( obsolète ) on peut utiliser les dialogs même en mode FULLSCREEN EXCLUSIVE, en tout cas c'était comme ça avec DirectX 9.0b, dans le SDK 9.0b y'a un exemple qui s'appelle "FullScreenDialog". Je connais pas Direct3D mais il me semble que les programmeurs en C++ utilise l'API DXUT qui fournit des contrôles entièrement codés avec Direct3D, en code managé et dans DirectX 9.0c ( Décembre 2005 ) je crois que cette API est implémentée sous le nom "Sample Framework" y'a un exemple dénommé "CustomUI" et le code source du "Sample Framework" se trouve dans "Samples\Managed\Common". J'ai pas testé tout ça, donc à toi de voir..
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
1 févr. 2006 à 09:34
Je comprends qu'il reprenne a partir de 0, pas tres intuitif de suivre le code du Sample Framework :/



Mx
MVP C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 09:49
Ah oui j'ai regardé un peu, c'est pas simple..

Mx, as tu testé DirectX10, qu'en penses tu, y'a beaucoup de changements !?

J'ai pas encore testé, et je crois que je ne peux pas avec XP de toute façon.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
1 févr. 2006 à 09:55
Je peux pas dire que j'ai testé, j'ai juste regardé vite fait. (je suis completement debutant en Dx : Creation de device, affichage de text et d'une forme simple )
Le point positif : juste un seul Assembly a utiliser.
Sinon, j'ai rencontré quelques noms de classes changées (Caps devient Capabilities, ...), ce qui force a devoir modifier du code si qqun veut migrer son appli.
Par contre, j'ai reussi a le faire tourner sous xp (sans rien faire de special). Peut-etre parce que c'etait simplement une fenetre sans rien dedans ^^.



Mx
MVP C#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 10:06
C'est bon à savoir, je vais tester ça dès que j'aurais un peu de temps..
0
cs_Killan Messages postés 46 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 5 février 2010
1 févr. 2006 à 21:18
Salut salut,

alors pour vous répondre, vu que je vise un aspect totalement modifiable graphiquement, je ne vais donc pas utiliser les samples UI de crosoft.

de plus le framework construit represente pour moi de grande barière, car on est confiné dans les possibilités du framework. alors j'ai repris un cran plus loin : le niveau 0 de Directx lol :)

concernant DX10, je me suis pas renseigné, j'étais meme pas au courant. Et puis bon avec la 9c c'est suffisant pour etre largement compatible un certain temps, c'est pour ça que je travail toujours avec des versions non-dernier cri.

question c'est quoi "from scratch" ? je ne connais pas le terme

concernant les solutions du problème : j'ai une possibilité en +

avec l'idée d'un thread donc, refaire une 2eme boucle graphique affichant la boite par dessus le dernier rendu en mémoire (evidemment je resume) ça permet d'avoir le meme affichage + les evenement en étant bloquant.

Je vais essayé ça et je viendrais rapporter le resultat, pour les intéressez contactez moi pour voir le projet :)

merci à vous,


Killan
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 22:01
Salut,

"from scratch" est à interpreter dans le sens "en partant de zéro", càd recoder les contrôles de A à Z :-)

/*
coq
MVP Visual C#
*/
0
cs_Killan Messages postés 46 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 5 février 2010
1 févr. 2006 à 22:04
merci Coq, on en apprend tout les jours :)

et oui je recommence à zéro, en utilisant un systeme d'event etc
0
Rejoignez-nous