Charger un gros textes dans une surface (DirectX) - C++ - Programmation
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.
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.
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.
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?
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. |
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 :
|
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 mais doit bien y'avoir un moyen!
Une petite aide ou un tuyau me serait utile