Refaire MessageBox : problème de blocage

Signaler
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
-
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
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..
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Je comprends qu'il reprenne a partir de 0, pas tres intuitif de suivre le code du Sample Framework :/



Mx
MVP C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
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.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
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#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
C'est bon à savoir, je vais tester ça dès que j'aurais un peu de temps..
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010

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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
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#
*/
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010

merci Coq, on en apprend tout les jours :)

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