Impression sur imprimante

Signaler
Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018
-
Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018
-
Bonjour,
Il y a forcément quelque chose que je n'ai pas encore bien compris concernant l'utilisation des devices contextes et des bitmaps.
Pourquoi ma solution 1 fonctionne et pourquoi ma solution 2 ne marche pas (j'édite une page blanche) ?
Merci
****************************************
********** Solution 1 (qui marche): ********** (prd.hDc est le device contexte de l'imprimante)
larg=GetDeviceCaps(prd.hDC, HORZRES);
haut=GetDeviceCaps(prd.hDC, VERTRES);
SetRect(&rect,larg*marges,haut*marges,larg-(larg*marges*2),haut-(haut*marges*2));
if ( StartDoc( prd.hDC, &di ) > 0 )
{
StartPage( prd.hDC );
Ellipse(prd.hDC,0,0,larg,haut);
DrawText(prd.hDC,"Ceci est une page de test",-1,&rect,DT_SINGLELINE | DT_VCENTER | DT_CENTER);
EndPage( prd.hDC );
EndDoc( prd.hDC );
}
******************************************
********** Solution 2 (qui ne marche pas): ****************
larg=GetDeviceCaps(prd.hDC, HORZRES);
haut=GetDeviceCaps(prd.hDC, VERTRES);
SetRect(&rect,larg*marges,haut*marges,larg-(larg*marges*2),haut-(haut*marges*2));
hDCmem = CreateCompatibleDC(prd.hDC);
Ellipse(hDCmem,rect.left,rect.top,rect.right,rect.bottom);
DrawText(hDCmem,"Ceci est une page de test",-1,&rect,DT_SINGLELINE | DT_VCENTER | DT_CENTER);
if ( StartDoc( prd.hDC, &di ) > 0 )
{
StartPage( prd.hDC );
BitBlt(prd.hDC,0,0,larg,haut,hDCmem,0,0,SRCCOPY); // copy hdcMemoire -> prd.hDC
EndPage( prd.hDC );
EndDoc( prd.hDC );
}
DeleteDC( hDCmem );

1 réponse

Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018

Bonjour,
Bon j'ai dans ma solution 2 rajouté les deux instructions ci-dessous anotées et cette fois ci j'obtiens quelque chose.
Mais au lieu d'obtenir un simple contour d'ellipse avec le texte "Ceci est une page de test" au milieu (c'est ce que je veux),
j'obtiens une ellipse coloriée en blanc à l'intérieur et en noir à l'extérieur sur toute la page.
Ce qui fait que le micro a mouliné pendant 5mn avant de sortir quelque chose et le texte "page de test" n'apparaît pas, je suppose qu'il est caché par l'ellipse.
Etait-ce bien ce qu'il fallait faire ? Et n'est-il pas possible d'obtenir seulement un contour avec la solution 2 ?
(prd.hDc est le device contexte de l'imprimante)

larg=GetDeviceCaps(prd.hDC, HORZRES);
haut=GetDeviceCaps(prd.hDC, VERTRES);
SetRect(&rect,larg*marges,haut*marges,larg-(larg*marges*2),haut-(haut*marges*2));
hbm=CreateCompatibleBitmap(prd.hDC, rect.right, rect.bottom); // **** 1ère instruction rajoutée ****
hDCmem = CreateCompatibleDC(prd.hDC);
SelectObject(hDCmem, hbm); // **** 2ème instruction rajoutée ****
Ellipse(hDCmem,rect.left,rect.top,rect.right,rect.bottom);
DrawText(hDCmem,"Ceci est une page de test",-1,&rect,DT_SINGLELINE | DT_VCENTER | DT_CENTER);
if ( StartDoc( prd.hDC, &di ) > 0 )
{
StartPage( prd.hDC );
BitBlt(prd.hDC,0,0,larg,haut,hDCmem,0,0,SRCCOPY); // copy hdcMemoire -> prd.hDC
EndPage( prd.hDC );
EndDoc( prd.hDC );
}
DeleteDC( hDCmem );

Merci