[API]

[Résolu]
Signaler
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013
-
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013
-
j'ai un petit probleme sur la fonction pour imprimer du texte, celui ci est bien imprimé mais le dernier caractere ne l'est pas et si il y a la touche entrée appuyé par exemple cela fait un carré au lieu de passer une ligne :s voici mon code, ou est le probleme :s

// Appelle une Common Dialog Box d'impression.

PRINTDLG print;
HDC hDCmem;
DOCINFO di;

print.lStructSize = sizeof(PRINTDLG);
print.hDevMode = (HANDLE) NULL;
print.hDevNames = (HANDLE) NULL;
print.Flags = PD_RETURNDC;
print.hwndOwner = hwnd;
print.hDC = (HDC) NULL;
print.nFromPage = 1;
print.nToPage = 1;
print.nMinPage = 0;
print.nMaxPage = 0;
print.nCopies = 1;
print.hInstance = NULL;
print.lCustData = 0L;
print.lpfnPrintHook = (LPPRINTHOOKPROC) NULL;
print.lpfnSetupHook = (LPSETUPHOOKPROC) NULL;
print.lpPrintTemplateName = (LPSTR) NULL;
print.lpSetupTemplateName = (LPSTR) NULL;
print.hPrintTemplate = (HANDLE) NULL;
print.hSetupTemplate = (HANDLE) NULL;

PrintDlg(&print);

// Crer un contexte de priphrique pour l'imprimante.
hDCmem = CreateCompatibleDC(print.hDC);

memset( &di, 0, sizeof( DOCINFO ) );
di.cbSize = sizeof( DOCINFO );
di.lpszDocName = "Sample Document";

// Imprimer le contenu de l'Edit Box sur l'imprimante.
lenbloc = GetWindowTextLength(hEdit);
tampon = (LPSTR)GlobalAlloc(LMEM_FIXED, lenbloc + 1);
GetWindowText(hEdit,tampon,lenbloc);
// si on ne trouve pas de caractere dans la fenetre on stop la
if(lenbloc < 1)
{
GlobalFree(tampon);
return 0;
}

if ( StartDoc( print.hDC, &di ) > 0 )
{
StartPage( print.hDC );
TextOut( print.hDC, 50, 50, tampon, lenbloc + 1);
EndPage( print.hDC );
EndDoc( print.hDC );
}

GlobalFree(tampon);
DeleteDC( hDCmem );
}

4 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
il sufit de compter :

char* s = tampon;
int index = 0;
TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);
while(*s != '\0')
{
// fin de ligne
char* end = strchr(s, '\r');
if(end == NULL)
end = s+strlen(s);

TextOut(hdc, 50, 50+index*tm.tmHeight, s, end-s);
index++;

// ligne suivante
s = end;
if(*s == '\r')
s++;
if(*s == '\n')
s++;
}

aux fautes de frappes près
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
- GetWindowText(hEdit,tampon,lenbloc+1);
sinon le dernier caractère n'y sera pas (la taille passée doit comprendre la place pour le nul de fin).

- TextOut ne permet pas d'aller à la ligne à chaque \r\n
Il faut dessiner les lignes une par une (en cherchant les \r\n)
Pour passer à la ligne d'après il te faudra la hauteur d'une ligne que tu peux récupérer par GetTextMetrics ou GetTextExtentPoint32.
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

ouai mais pour le \r\n le probleme est de savoir dans quel ligne on est de hEdit au moment ou il ya le \r\n :s comment j'fais ca :s
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

merci beaucoup