Impression d'un editbox en plusieurs pages

Contenu du snippet

J'ai rajouté à ce code (récupéré sur ce site) une petite partie qui permet surtout de faire une fonction simple d'impression d'un editbox.

Le + important: Il est capable de remplacé les '\n' par des saut à la lignes et changer de pages toutes les 65 lignes affiché.

Biensur il est modifiable façilement pour pouvoir imprimer n'importe quel char* voir n'importe quel fichier façilement.

Source / Exemple :


void ImprimeEditBox()
{
    char *LeText = NULL;
    LeText = new char[(GetWindowTextLength(EditHandle) + 2)];
    int TextLen;
//    TextLen = GetWindowTextLength(EditHandle);
    TextLen = GetWindowText(EditHandle, LeText, (GetWindowTextLength(EditHandle) + 1));

//    MessageBox (NULL, , "IMPRIMANTE", MB_OK);
    MessageBox (NULL, LeText, "IMPRIMANTE", MB_OK);
	PRINTDLG	pd;
	DOCINFO		di;
	char*		szMessage;

	memset (&pd, 0, sizeof(PRINTDLG));
	memset (&di, 0, sizeof(DOCINFO));

	di.cbSize = sizeof(DOCINFO);
	di.lpszDocName = "Test";

	pd.lStructSize = sizeof(PRINTDLG);
	pd.Flags = PD_PAGENUMS | PD_RETURNDC;
	pd.nFromPage = 1;
	pd.nToPage = 1;
	pd.nMinPage = 1;
	pd.nMaxPage = 1;
	szMessage = 0;

	if (PrintDlg (&pd))
	{
		if (pd.hDC)
		{
			if (StartDoc (pd.hDC, &di) != SP_ERROR)
			{
              // Va contenir le texte du EditBox
              char *LeText = NULL;
              // Va contenir le nombres de caractères dans le EditBox
              int TextLen = 0;
              // Récupère le nombres de caractères dans le EditBox
              TextLen = GetWindowTextLength(EditHandle);
              // S'il n'est pas vide
              if (TextLen)
              {
                // Alloue de la mémoire pour stocker le texte
                LeText = new char[(TextLen + 2)];
                // Récupère le texte
                TextLen = GetWindowText(EditHandle, LeText, (TextLen + 1));
                char LignePrint[100];
//                int i =0;
                int Index1 = 0;
                int Index2 = 2;
                int Exit = 0;
                if (TextLen > 0)
                {
                  for (int i=0;i < TextLen;i++)
                  {
                    LignePrint[Index1] =  LeText[i];
                    if (LeText[i] == '\n')
                    {
                      Index2 ++;
                      LignePrint[Index1] = '\0';
                      TextOut (pd.hDC,100, Index2*100, LignePrint, strlen(LignePrint));
                      Index1 = 0;
                    }
                    else Index1 ++;
                    if (Index2 == 60)
                    {
                  	   EndPage (pd.hDC);
                       EndDoc (pd.hDC);
                       StartDoc (pd.hDC, &di);
                       Index2 = 2;
                    }
                  }/**/
                  Index2 ++;
                  LignePrint[Index1] = '\0';
                  TextOut (pd.hDC,100, Index2*100, LignePrint, strlen(LignePrint));
               	  EndPage (pd.hDC);
                  EndDoc (pd.hDC);
                  szMessage = "IMPRESSION OK";
                }
                else MessageBox (NULL, "Ne peut pas imprimer du vide", "IMPRIMANTE", MB_OK);
              }
			}
			else
			{
				szMessage = "ERREUR Type 1";
			}
		}
		else
		{
			szMessage = "ERREUR Type 2.";
		}
	}
	else
	{
		szMessage = "Impression annulé par l'utilisateur";
	}
	if (szMessage)
	{
		MessageBox (NULL, szMessage, "IMPRIMANTE", MB_OK);
	}
	return;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.