BugcORE
Messages postés46Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 octobre 2006
-
16 sept. 2006 à 20:06
cs_bbear
Messages postés92Date d'inscriptionjeudi 24 novembre 2005StatutMembreDernière intervention29 mai 2008
-
17 sept. 2006 à 14:48
Salut a tous !
Oui c'est encore moi ! Je sais que certain en a marre de moi mais bon .....
Le problème c'est que je suis en train de créé un police a partir d'images .bmp
j'ai 26 images de A à Z.
Mon code :
for (i=0;i<TextSize;i++)
{
Letter=ScrollText[i];
hBitmap[i] = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BITMAP_+Letter));
BlitBmp(hDC, hBitmap[i], i*32, 0, 0, 0); //<-C'est un fonction que j'ai crée pour simplifié BitBlt()
}
Dans mes resources ya :
#define IDB_BITMAP_A 2001
#define IDB_BITMAP_B 2002
#define IDB_BITMAP_C 2003
.....
Je pense que le problème vien de la :
Letter=ScrollText[i];
ou de la :
IDB_BITMAP_+Letter
car si je met IDB_BITMAP_A sa maffiche bien 3 A !
Si quelqu'un aurait une idéé pour mon problème ....
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 16 sept. 2006 à 20:13
MAKEINTRESOURCE(IDB_BITMAP_+Letter)????
Je crois que ton problème vien plutot de là. Tu devrais faire:
MAKEINTRESOURCE(IDB_BITMAP_A+Letter) Letter serais égal à 0 si il s'agit de A, 1 si il s'agit de B etc. Il y a plus de chance comme ça que ça fonctionne.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 16 sept. 2006 à 20:26
Menfin c'est un exemple. Je ne sais pas comment tu procède avec ton Letter (quelle valeur il a quand tu interprete un C par exemple) mais c'était pour que tu comprène le principe. À toi de faire les modifications nécessaire pour le bon fonctionnement du programme.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 16 sept. 2006 à 20:33
Oui et non. En fait si tu fait:
IDB_BITMAP_A
Tu va avoir sa valeur qui équivaut à 2001 d'après tes sources. Donc si tu veux A, Letter devrait égaler 0:
MAKEINTRESOURCE(IDB_BITMAP_A+Letter)
Si tu veux B,Letter devrais égaler 1 donc tu auras 2001 qui est la valeur de IDB_BITMAP_A plus Letter donc 2001 + 1 qui égalera à 2002:MAKEINTRESOURCE(IDB_BITMAP_A+Letter) // Letter 1 donc résultat 2002
qui équivaut à IDB_BITMAP_B et ainsi de suite pour C, D, E.
Comprend tu le principe?
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 16 sept. 2006 à 23:21
Bien en effet, le seul moyen que tu as pour écrire avec ta police c'est d'examiner lettre par lettre. Cependant, le code renvoyer dans Lettre sera le code hexadecimal de la lettre. Il faudrait comme moyen, soustraire tout simplement. Ce sont des majuscules? Alors essais ceci:
MAKEINTRESOURCE(IDB_BITMAP_A+(Letter-'A'))
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 16 sept. 2006 à 23:34
Tout en gardent ton procédé actuel. Sinon, voici un exemple:
void PolicePerso (char *chaine)
{
int Lettre;
while(*chaine)
{
Lettre = *chaine;
// Ici, tu met ton procédé pour charger les images et tu remplace ton MAKEINTRESOURCE actuel par MAKEINTRESOURCE(IDB_BITMAP_A+(Letter-'A'))
*chaine++;
}
}
Voilà. Ceci devrais charger ta police via une chaine de caractère.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 17 sept. 2006 à 00:07
Évidament, la méthode actuelle ne peut fonctionner qu'avec des lettres
UNIQUEMENT. Si il y a des chiffres dans la chaine, le resultat pourrait
être bizare.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
cs_bbear
Messages postés92Date d'inscriptionjeudi 24 novembre 2005StatutMembreDernière intervention29 mai 2008 17 sept. 2006 à 02:11
pfiu! tu te compliques la vie si c'est pour faire un scrolltext avec une police bitmap !!
il faut faire comme au bon vieux temps des demos
toutes les lettres dans un bitmap en ressource (largeur fixe ou non, le plus simple etant fixe)
à l'init du prog, on charge une bonne fois pour toute la font hFont=(HBITMAP)LoadImage(...,MAKEINTRESOURCE(IDB_FONT),IMAGE_BITMAP,...)
et un hdc lié (hdcFont)
un tableau pour l'ordre des lettres dans la bitmap:
char tabchars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-!:.,'() ";
et le tableau de char du texte.
ensuite faire une fonction GetChar qui renvoie la position de la lettre voulue dans la bitmap :
int GetChar(char letter, char *tabchar)
{
int pos=0;
char* p=tabchar; // pointe sur le tableau des lettres de la font
// cherche où se trouve la lettre
while((*p++ != letter)&&(*p!=0)) pos++;
if(*p==0) pos=-1;
return pos;
}
ensuite pour afficher dans la boucle for le caractere voulue par exemple scrolltxt[i]
poschar=GetChar(scrolltxt[i],tabchars);
if(poschar>=0){
BitBlt(hdc,posx,posy,charwidth,charheight,hdcFont,poschar*charwidth,0,SRCCOPY)
}
c'est beaucoup plus simple que de gerer par 1 bitmap par lettre
comme dans les vrais demos quoi
enfin, je dis ça, si c'est bien là le but de la manoeuvre, sinon, désolé du derangement
cs_bbear
Messages postés92Date d'inscriptionjeudi 24 novembre 2005StatutMembreDernière intervention29 mai 2008 17 sept. 2006 à 14:48
légère modif (un petit doublon qui sert à rien)
int GetChar(char letter, char *p)
{
int pos=0;
// cherche où se trouve la lettre (p pointe sur le tabchar de la font)
while((*p++ != letter)&&(*p!=0)) pos++;
if(*p==0) pos=-1;
return pos;
}
pour une font proportionnelle, il faut rajouter un tableau avec les largeurs de chq lettre