Charger un gros textes dans une surface (DirectX)

Charger un gros textes dans une surface (DirectX) - C++ - Programmation

Marsh Posté le 13-11-2005 à 00:11:46    

Dans un jeu en DirectX, je dois insérer de gros texte dans des surfaces. Pour ça mes textes doivent être mit à la ligne lorsque la longueur est trop grande. J'ai essayé avec /n, /r/n ça marche pas. On dirait que lorsque la surface est crée et dimensionnée, elle ne detecte pas les caractères de mise à la ligne et ça me fait une surface de 3000 px en largeur et 16 px en hauteur ce qui rend le texte illisible sur l'écran.  Bon c'est un problème qui doit être super connu mais je trouve aucune bonne référence qui m'aiderai à le résoudre.
 
Pour info j'utilise les fonctions strcpy(), strcat() , strlen() pour stocker et manipuler mes chaînes. C'est dépassé je sais :p mais doit bien y'avoir un moyen!
 
Une petite aide ou un tuyau me serait utile :)

Reply

Marsh Posté le 13-11-2005 à 00:11:46   

Reply

Marsh Posté le 14-11-2005 à 18:44:49    

Solution stupide : tu crée une surface par ligne en gérant toi-même les sauts de ligne (c'est con, mais je ne peux pas t'aider plus, j'ai jamais vraiment utilisé DirectX).
PS : Sinon la vrai réponse m'interesse aussi.


Message édité par Koko90 le 14-11-2005 à 18:45:39

---------------
Découvrez l'anthologie des posts de Mikhail. Je suis le cinéphile déviant.
Reply

Marsh Posté le 15-11-2005 à 08:43:28    

Je l'ai partiellement trouvée. Il faut utiliser la fonction Windows DrawText() au lieu de TextOut() pour afficher le texte dans un rectangle, en spécifiant le format DT_WORDBREAK.
 
Le problème c'est que, à l'endroit où les mots sont coupés, la surface est vide et tout ce qui a été chargé précédamment (textes images) s'y affiche, c'est donc très moche. Je trouve pas l'option pour contrer ce problème, va falloir bricoler un truc.


Message édité par bkadoum le 15-11-2005 à 08:46:19
Reply

Marsh Posté le 15-11-2005 à 08:51:49    

j'avais fait un petit jeu en DirectDraw y' 1 an de ça et j'étais tombé sur le même problème. Comme solution, vu que je travaillais avec des polices à espacement fixe, je comptais le nb de caractères et je coupais à un certain nb (sans couper en plein milieu d'un mot tout de même) et passais à la ligne avec textout (il me semble), mais je ne crois pas que je créais une nouvelle surface, je me déclais seulement vers le bas de qq pixels.

Reply

Marsh Posté le 15-11-2005 à 11:50:24    

rufo a écrit :

j'avais fait un petit jeu en DirectDraw y' 1 an de ça et j'étais tombé sur le même problème. Comme solution, vu que je travaillais avec des polices à espacement fixe, je comptais le nb de caractères et je coupais à un certain nb (sans couper en plein milieu d'un mot tout de même) et passais à la ligne avec textout (il me semble), mais je ne crois pas que je créais une nouvelle surface, je me déclais seulement vers le bas de qq pixels.


 
Je vais peut-être faire ça vu que je m'en sors pas avec DrawText là. Par contre je comprend pas comment tu fais pour mettre à la ligne avec TextOut.
 
T'a pas un bout de code à montrer? :)

Reply

Marsh Posté le 15-11-2005 à 13:59:57    

bkadoum a écrit :

Je vais peut-être faire ça vu que je m'en sors pas avec DrawText là. Par contre je comprend pas comment tu fais pour mettre à la ligne avec TextOut.
 
T'a pas un bout de code à montrer? :)


 
pas là, car mon code est chez moi. Mais textout a comme paramètres x et y. Donc tu fais plusieurs textout() de sous chaînes de ta chaîne principale et tu décales vers le bas la coordonnée y.
 
ex :  

Code :
  1. chaîne principale = "un texte qui est très long" devient
  2. textout("un texte", 50, 100, ...)
  3. textout("qui est", 50, 125, ...)
  4. textout("très long", 50, 150, ...)


Message édité par rufo le 15-11-2005 à 14:00:16
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed