[API]

Résolu
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 7 déc. 2005 à 17:33
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 8 déc. 2005 à 18:36
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
8 déc. 2005 à 18:32
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
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
8 déc. 2005 à 09:39
- 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.
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 17:36
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
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 18:36
merci beaucoup
0
Rejoignez-nous